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

优采云 发布时间: 2021-12-15 01:13

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

  既然这篇文章文章讲的是Python搭建网络爬虫的原理分析,那我先给大家介绍一下Python中爬虫的选择文章:

  Python实现简单爬虫功能示例

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

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

  构建网络爬虫有很多因素,尤其是当您要扩展系统时。这就是为什么这已经成为最流行的系统设计面试问题之一。在这个文章中,我们将讨论从基础爬虫到大型爬虫的话题,讨论面试中可能遇到的各种问题。

  1-基本解决方案

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

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

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

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

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

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

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

  根据具体问题,有时我们可能有一个单独的系统来生成抓取网址。例如,一个程序可以持续监控RSS订阅,对于每一个新的文章,都可以将URL添加到爬取池中。

  2 尺度问题

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

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

  3-爬行频率

  你多久爬一次 网站?

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

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

  4-重复数据删除

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

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

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

  布隆过滤器是一种非常常用的技术,它是网络爬虫中去除重复网址的完美解决方案。

  5-解析

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

  我们面临的挑战是你总会在 HTML 代码中发现奇怪的标签、URL 等,并且很难覆盖所有的边界条件。例如,当 HTML 收录非 Unicode 字符时,您可能需要处理编码和解码问题。此外,当网页中收录图片、视频甚至PDF文件时,也会引起奇怪的行为。

  另外,有些网页像AngularJS一样是用Javascript渲染的,你的爬虫可能无法获取到任何内容。

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

  总结

  有很多有趣的话题我还没有触及,但我想提一下其中的一些,以便您可以思考它们。一件事是检测循环。很多网站都收录链接,比如A->B->C->A,你的爬虫可能会一直跑下去。想想如何解决这个问题?

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

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

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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线