抓取网页数据违法吗(HowtoWebScrapewithPythonin4Minutes翻译|M.Y.Li校对|就2)
优采云 发布时间: 2022-01-06 01:01抓取网页数据违法吗(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
导入时间
frombs4importBeautifulSoup
接下来,我们将 url 设置为目标 网站 并使用我们的请求库访问该站点。
网址 = '
响应 = requests.get(url)
如果访问成功,您应该看到以下输出:
接下来,我们使用 html 嵌套数据结构。如果您有兴趣了解有关此库的更多信息,请查看 BeautifulSoup 文档。
汤 = BeautifulSoup(response.text, “html.parser”)
我们使用 .findAll 方法来定位我们所有的
标记。
汤.findAll('a')
此代码已找到所有
标记的代码片段。我们感兴趣的信息从第36行开始,并不是所有的链接都是我们想要的,但大部分都是,所以我们可以很容易地从36行中分离出来。下面是我们输入上述代码时BeautifulSoup返回给我们的部分信息.
所有标签的子集
接下来,让我们提取我们想要的实际链接。先测试第一个链接。
one_a_tag = 汤.findAll('a')[36]
链接=one_a_tag['href']
此代码将'data/nyct/turnstile/turnstile_le_180922.txt 保存到我们的变量链接。下载数据的完整网址实际上是“”。我通过单击 网站 上的第一个数据文件作为测试发现了这一点。我们可以使用 urllib.request 库将此文件路径下载到我们的计算机。我们为 request.urlretrieve 提供 ve 并提供两个参数:文件 url 和文件名。对于我的文件,我将它们命名为“turnstile_le_180922.txt”、“t”、“turnstile_180901”等。
download_url ='#39;+ 链接
urllib.request.urlretrieve(download_url,'./'+link[link.find('/turnstile_')+1:])
最后但并非最不重要的是,我们应该收录以下代码行,以便我们可以暂停代码运行一秒钟,这样我们就不会通过请求向 网站 发送垃圾邮件,这有助于我们避免被标记为垃圾邮件发送者.
time.sleep(1)
现在我们已经了解了如何下载文件,让我们尝试使用 网站 来捕获旋转门数据的完整代码集。
# 导入库
*敏*感*词*请求
导入urllib.request
导入时间
frombs4importBeautifulSoup
# 设置要抓取的 URL
网址 ='#39;
# 连接到网址
响应 = requests.get(url)
# 解析 HTML 并保存到 BeautifulSoup 对象¶
汤 = BeautifulSoup(response.text,"html.parser")
# 要下载整个数据集,让我们对所有 a 标签进行 for 循环
foriinrange(36,len(soup.findAll('a'))+1):#'a' 标签用于链接
one_a_tag = 汤.findAll('a')[i]
链接 = one_a_tag['href']
download_url ='#39;+ 链接
urllib.request.urlretrieve(download_url,'./'+link[link.find('/turnstile_')+1:])
time.sleep(1)#暂停代码一秒
你可以在我的 Github 上找到我的 Jupyter 笔记。感谢阅读,如果你喜欢这个文章,请尽量点击Clap按钮。
祝你爬网愉快!