爬虫抓取网页数据(一下实现简单爬虫功能的示例python爬虫实战之最简单的网页爬虫教程)

优采云 发布时间: 2022-01-19 08:16

  爬虫抓取网页数据(一下实现简单爬虫功能的示例python爬虫实战之最简单的网页爬虫教程)

  既然本文文章是解析Python搭建网络爬虫的原理,那么小编就为大家展示一下Python中爬虫的选择文章:

  python实现简单爬虫功能的例子

  python爬虫最简单的网络爬虫教程

  网络爬虫是当今最常用的系统之一。最流行的例子是 Google 使用爬虫从所有 网站 采集信息。除了搜索引擎,新闻网站还需要爬虫来聚合数据源。看来,每当你想聚合大量信息时,都可以考虑使用爬虫。

  构建网络爬虫涉及许多因素,尤其是当您想要扩展系统时。这就是为什么这已成为最受欢迎的系统设计面试问题之一。在本期文章中,我们将讨论从基础爬虫到*敏*感*词*爬虫的各种话题,并讨论您在面试中可能遇到的各种问题。

  1 - 基本解决方案

  如何构建一个基本的网络爬虫?

  在系统设计面试之前,正如我们在“系统设计面试之前你需要知道的八件事”中已经谈到的那样,它是从简单的事情开始。让我们专注于构建一个在单线程上运行的基本网络爬虫。通过这个简单的解决方案,我们可以继续优化。

  爬取单个网页,我们只需要向对应的 URL 发起 HTTP GET 请求并解析响应数据,这就是爬虫的核心。考虑到这一点,一个基本的网络爬虫可以像这样工作:

  从一个收录我们要爬取的所有 网站 的 URL 池开始。

  对于每个 URL,发出 HTTP GET 请求以获取网页内容。

  解析内容(通常是 HTML)并提取我们想要抓取的潜在 URL。

  将新 URL 添加到池中并继续爬行。

  根据问题,有时我们可能有一个单独的系统来生成抓取 URL。例如,一个程序可以不断地*敏*感*词* RSS 提要,并且对于每个新的 文章,可以将 URL 添加到爬虫池中。

  2 - 规模问题

  众所周知,任何系统在扩容后都会面临一系列问题。在网络爬虫中,当将系统扩展到多台机器时,很多事情都可能出错。

  在跳到下一节之前,请花几分钟时间思考一下分布式网络爬虫的瓶颈以及如何解决它。在本文章 的其余部分,我们将讨论解决方案的几个主要问题。

  3 - 抓取频率

  你多久爬一次网站?

  除非系统达到一定规模并且您需要非常新鲜的内容,否则这听起来可能没什么大不了的。例如,如果要获取最近一小时的最新消息,爬虫可能需要每隔一小时不断地获取新闻网站。但这有什么问题呢?

  对于一些小的网站,很可能他们的服务器无法处理如此频繁的请求。一种方法是关注每个站点的robot.txt。对于那些不知道什么是robot.txt 的人来说,这基本上是与网络爬虫通信的网站 标准。它可以指定哪些文件不应该被爬取,大多数网络爬虫都遵循配置。此外,您可以为不同的 网站 设置不同的抓取频率。通常,每天只需要多次爬取网站s。

  4 - 重复数据删除

  在单台机器上,您可以在内存中保留 URL 池并删除重复条目。然而,在分布式系统中事情变得更加复杂。基本上,多个爬虫可以从不同的网页中提取相同的 URL,并且都想将这个 URL 添加到 URL 池中。当然,多次爬取同一个页面是没有意义的。那么我们如何去重复这些 URL 呢?

  一种常见的方法是使用布隆过滤器。简而言之,布隆过滤器是一种节省空间的系统,它允许您测试元素是否在集合中。但是,它可能有误报。换句话说,如果布隆过滤器可以告诉你一个 URL 肯定不在池中,或者可能在池中。

  为了简要解释布隆过滤器的工作原理,一个空布隆过滤器是一个 m 位的位数组(所有 0)。还有 k 个哈希函数将每个元素映射到一个 A。所以当我们添加一个新元素时 ( URL) 在布隆过滤器中,我们将从散列函数中获取 k 位并将它们全部设置为 1. 所以当我们检查一个元素是否存在时,我们首先获取 k 位,如果其中任何一个不为 1,我们立即知道该元素不存在。但是,如果所有 k 位都是 1,这可能来自其他几个元素的组合。

  布隆过滤器是一种非常常见的技术,它是在网络爬虫中对 URL 进行重复数据删除的完美解决方案。

  5 - 解析

  从网站得到响应数据后,下一步就是解析数据(通常是HTML)来提取我们关心的信息。这听起来很简单,但是,要让它变得健壮可能很困难。

  我们面临的挑战是您总是会在 HTML 代码中发现奇怪的标签、URL 等,而且很难涵盖所有的边缘情况。例如,当 HTML 收录非 Unicode 字符时,您可能需要处理编码和解码问题。此外,当网页收录图像、视频甚至 PDF 时,可能会导致奇怪的行为。

  此外,某些网页是通过 Javascript 与 AngularJS 一样呈现的,您的爬虫可能无法获取任何内容。

  我想说,没有灵丹妙药可以为所有网页制作完美、强大的爬虫。您需要进行大量的稳健性测试以确保它按预期工作。

  总结

  还有很多有趣的话题我还没有涉及,但我想提一些,以便您思考。一件事是检测循环。许多 网站 收录 A->B->C->A 之类的链接,您的爬虫可能会永远运行。思考如何解决这个问题?

  另一个问题是 DNS 查找。当系统扩展到一定水平时,DNS 查找可能会成为瓶颈,您可能希望构建自己的 DNS 服务器。

  与许多其他系统类似,扩展的网络爬虫可能比构建*敏*感*词*本要困难得多,而且很多事情都可以在系统设计面试中讨论。尝试从一些幼稚的解决方案开始并不断优化它可以使事情变得比看起来更容易。

  以上就是我们对网络爬虫相关文章内容的总结。如果你还有什么想知道的,可以在下方留言区讨论。感谢您对 Scripting Home 的支持。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线