从网页抓取数据(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 按钮。

  快乐的网络抓取!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线