【问题标题】:Multithreading in Scrapy using proxiesScrapy 中的多线程使用代理
【发布时间】:2016-08-13 12:06:47
【问题描述】:

我想使用 scrapy 抓取大约 400 万页。我正在使用storm proxies。 假设我的帐户允许的线程数是 20。 我想问-

是多线程意味着 CONCURRENT_REQUESTS_PER_DOMAIN ,在scrapy中。

或者有其他方法可以做到这一点。

我怎样才能有效地使用这 20 个线程

注意 - 如果我对我的问题不清楚,请发表评论,我会尝试详细说明。

【问题讨论】:

  • 嗨,sagar,你能分享你的scrapy Storm代理中间件吗?我有兴趣做类似的事情。
  • @sagar 是的,你能分享一下吗?

标签: python multithreading web-scraping scrapy


【解决方案1】:

直接脱离文档:

CONCURRENT_REQUESTS- 最大并发数(即 同时)将由 Scrapy 执行的请求 下载器。

CONCURRENT_REQUESTS_PER_DOMAIN - 最大并发数 (即同时)将对任何单个请求执行的请求 域。

CONCURRENT_REQUESTS_PER_IP - 最大并发数(即 同时)将对任何单个 IP 执行的请求。如果 非零,CONCURRENT_REQUESTS_PER_DOMAIN 设置被忽略,并且 这个被使用了。换句话说,并发限制将是 应用每个 IP,而不是每个域。

直接回答你的问题

我怀疑该服务只能让您总共抓取多达 20 个线程,这意味着它不关心您的请求,因此您应该使用 CONCURRENT_REQUESTS 设置为最大 20(默认为 16)。

每个请求都是“一种线程”。它建立在Twisted 之上。在您使用的代理服务看来,没有办法区分,所以每个请求都将是一个代理线程!

【讨论】:

  • 谢谢!你能告诉我,我怎么能在一天内发出 200 万个请求,一些最佳实践可能是,我目前能够使用代理发出 40000 个请求
  • 您有什么方法可以监控在任何给定时间点打开了多少线程?在代理系统中
  • 不是真的,我使用了一个中间件并设置了 request.meta[proxy] = proxy(他们提供给我)
  • 拜托我真的被困在提高爬虫的效率上,增加 CONCURRENT_REQUSTS 是唯一的方法吗?
  • 您可以使用多个服务器并在其上部署蜘蛛,将数据库中的 url 提供给爬虫,这样它们就不会重叠链接(scrapy redis 做得很好),除了我看不到其他方法增加运行爬虫的机器的基础设施(如更多内核、更多内存、更好的网络)。
猜你喜欢
  • 1970-01-01
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 2022-12-04
  • 2011-08-25
  • 1970-01-01
相关资源
最近更新 更多