使用Python实现分布式网页抓取 - ZenRows


以分布式和容错的方式对内容进行爬取、抓取、提取和大规模存储。首先,我们了解了抓取内容的专业技术,尽管今天我们只会使用 CSS 选择器。然后是避免块的技巧,我们将从中添加代理、标头和无头浏览器。最后,我们构建了一个并行爬虫,这篇博文从该代码开始。
 
先决条件:
要使代码正常工作,您需要安装[url=https://redis.io/]Redis[/url]和python3。有些系统已经预先安装了它。之后,通过运行安装所有必要的库pip install。

pip install install requests beautifulsoup4 playwright "celery[redis]" 
npx playwright install 

Celery “是一个开源的异步任务队列”。提供了一个实际的分布式队列实现。我们将使用它在工作人员和服务器之间分配我们的负载。
Redis “是一种开源的内存数据结构存储,用作数据库、缓存和消息代理。” 我们将使用 Redis 作为数据库,而不是使用数组和集合来存储所有内容(在内存中)。此外,Celery 可以使用 Redis 作为代理,因此我们不需要其他软件来运行它。
 
详情点击标题,代码查看存储库
两个入口点:tasks.py用于 Celery ;main.py用于排队 URL。从那里,我们开始在 Redis 中存储 URL 以跟踪并开始抓取第一个 URL。自定义或默认解析器将获取 HTML,提取和过滤链接,并生成和存储适当的内容。我们将这些链接添加到列表中,然后重新开始该过程。感谢 Celery,一旦队列中有多个链接,并行/分布式进程就开始了。
 
大规模构建自定义爬虫/解析器不是一件容易也不直接的任务。我们提供了一些指导和技巧,希望对大家的日常工作有所帮助。
在大规模开发像这个项目一样大的东西之前,请考虑一些重要的要点:

  1. 责任分开。
  2. 必要时使用抽象,但不要过度设计。
  3. 不要害怕使用专门的软件而不是构建一切。
  4. 即使你现在不需要它,也要考虑扩展;请记住它。