从网页抓取数据(HowtoWebScrapewithPythonin4Minutes翻译|M.Y.Li校对|就2)
优采云 发布时间: 2022-04-08 00:05从网页抓取数据(HowtoWebScrapewithPythonin4Minutes翻译|M.Y.Li校对|就2)
本文为AI研究院整理的技术博客,原标题:
如何在 4 分钟内使用 Python 进行网页抓取
翻译 | MY Li 校对 | 按 2 排序 | 菠萝女孩
图片来自
网页抓取是一种自动访问网站并提取大量信息的技术,可以节省大量时间和精力。在本文中,我们将使用一个简单的示例来说明如何从纽约 MTA 自动下载数百个文件。对于希望学习如何进行网络抓取的初学者来说,这是一个很好的练习。网页抓取可能有点复杂,因此本教程将逐步对其进行分解。
纽约 MTA 数据
我们将从这个 网站 下载有关纽约公共交通地铁站闸机的数据:
这些旋转门的数据从 2010 年 5 月至今每周汇总一次,因此 网站 上有数百个 .txt 文件。以下是一些数据片段,每个日期都是指向可供下载的 .txt 文件的链接。
手动右键单击每个链接并保存到本地会很费力,幸运的是我们有网络抓取!
关于网络抓取的重要说明:
1. 仔细阅读网站 条款和条件,了解如何合法使用这些数据。大多数网站禁止您将数据用于商业目的。
2. 确保您没有下载数据太快,因为这可能会导致 网站 崩溃并且您可能无法访问网络。
检查 网站
我们需要做的第一件事是弄清楚如何从多级 HTML 标记中找到我们想要下载的文件的链接。简而言之,网站 页面有很多代码,我们想找到收录我们需要的数据的相关代码片段。如果您不熟悉 HTML 标记,请参阅 W3schools 教程。对于成功的网络抓取,了解 HTML 的基础知识很重要。
右键单击网页,然后单击“检查”,您可以查看该站点的原创代码。
单击“检查”后,您应该会看到此控制台弹出。
安慰
请注意,控制台左上角有一个箭头符号。
如果单击此箭头,然后单击 网站 本身的区域,控制台将突出显示该特定项目的代码。我单击了 2018 年 9 月 22 日星期六的第一个数据文件,控制台突出显示了该特定文件的链接。
2018 年 9 月 22 日星期六
请注意,所有 .txt 文件都在
在上一行的标记内。随着您进行更多的网络抓取,您会发现
用于超链接。
现在我们已经确定了链接的位置,让我们开始编程吧!
Python代码
我们首先导入以下库。
*敏*感*词*请求
导入urllib.request
*敏*感*词*时间
frombs4import 美汤
接下来,我们将 url 设置为目标 网站 并使用我们的请求库来访问该站点。
网址='
响应=请求.get(url)
如果访问成功,您应该看到以下输出:
接下来,我们使用html嵌套数据结构。如果您有兴趣了解有关此库的更多信息,请查看 BeautifulSoup 文档。
汤= BeautifulSoup(response.text,“html.parser”)
我们使用 .findAll 方法来定位我们所有的
标记。
汤.findAll('a')
这段代码为我们找到了所有
标记的代码片段。我们感兴趣的信息从第 36 行开始。并不是所有的链接都是我们想要的,但大多数都是,所以我们可以很容易地从第 36 行分离出来。下面是当我们输入上述代码时 BeautifulSoup 返回给我们的一些信息。
所有标记的子集
接下来,让我们提取我们想要的实际链接。首先测试第一个链接。
one_a_tag=soup.findAll('a')[36]
链接=one_a_tag['href']
此代码将 'data/nyct/turnstile/turnstile_le_180922.txt 保存到我们的变量链接中。下载数据的完整 url 实际上是“”,这是我通过点击 网站 上的第一个数据文件进行测试发现的。我们可以使用 urllib.request 库将此文件路径下载到我们的计算机。我们为 request.urlretrieve 提供了两个参数:文件 url 和文件名。对于我的文件,我将它们命名为“turnstile_le_180922.txt”、“t”、“turnstile_180901”等。
download_url= '#x27;+ 链接
urllib.request.urlretrieve(download_url,'./'+link[link.find('/turnstile_')+1:])
最后但同样重要的是,我们应该收录以下代码行,以便我们可以暂停代码一秒钟,这样我们就不会向 网站 发送垃圾请求,这有助于我们避免被标记为垃圾邮件发送者。
时间.sleep(1)
现在我们已经了解了如何下载文件,让我们尝试使用 网站 获取旋转栅门数据的完整代码集。
# 导入库
*敏*感*词*请求
导入urllib.request
*敏*感*词*时间
frombs4import 美汤
# 设置你想抓取的 URL
网址='#x27;
# 连接到网址
响应 = requests.get(url)
# 解析 HTML 并保存到 BeautifulSoup 对象¶
汤 = BeautifulSoup(response.text,"html.parser")
# 要下载整个数据集,让我们对所有 a 标签进行 for 循环
foriinrange(36,len(soup.findAll('a'))+1):#'a' 标签用于链接
one_a_tag = soup.findAll('a')[i]
链接 = one_a_tag['href']
download_url = '#x27;+ 链接
urllib.request.urlretrieve(download_url,'./'+link[link.find('/turnstile_')+1:])
time.sleep(1)#暂停代码一秒
你可以在我的 Github 上找到我的 Jupyter 笔记。感谢阅读,如果你喜欢这个 文章,请尽可能多地点击 Clap 按钮。
快乐的网络抓取!