【问题标题】:Scraping a large number of urls in Python在 Python 中抓取大量 url
【发布时间】:2017-03-31 08:45:04
【问题描述】:

我有 630,220 个网址需要打开和抓取。这些 url 本身已被抓取,并且抓取它们要容易得多,因为每个抓取的页面都会返回大约 3,500 个 url。

为了抓取这 630,220 个网址,我目前正在使用线程在 Python 中进行并行抓取。使用 16 个线程,抓取 200 个 url 需要 51 秒。因此,我需要 44 小时才能抓取所有 630,220 个网址,这似乎是处理此问题的一种不必要的耗时且效率极低的方法。

假设服务器不会过载,有没有办法异步发送每秒 1000 个请求之类的东西?这会将总抓取时间减少到大约 10 分钟,这是相当合理的。

【问题讨论】:

  • 你可能对asyncio感兴趣。
  • Scrapy 已经是异步的,比您在不久的将来可以手动处理的功能要强大得多,并且可以投入生产。单个benchmark 可能会为您提供一些见解。

标签: python asynchronous web-scraping


【解决方案1】:

使用gevent。启用 Python 标准库的猴子补丁,只需使用您最喜欢的报废库 - 用 1000 个执行相同操作的 greenlet 替换线程。你就完成了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 2018-10-06
    相关资源
    最近更新 更多