y痒:蜘蛛退出所有错误产生之前没有错误消息

时间:2018-10-26 12:10:35

标签: python scrapy

如果调度程序中有很多请求,调度程序会拒绝更多要添加的请求吗?

我遇到了一个非常棘手的问题。我正在尝试抓取所有帖子和评论的论坛。问题是令人毛骨悚然的,似乎永远无法完成工作并退出而没有错误消息。我想知道我是否发出过多请求,以至于scrapy停止产生新请求而只是退出。

但是我找不到文档说,如果计划中的请求过多,scrapy将退出。这是我的代码: https://github.com/spacegoing/sentiment_mqd/blob/a46b59866e8f0a888b43aba6df0481a03136cf21/guba_spiders/guba_spiders/spiders/guba_spider.py#L217

奇怪的是,刮擦似乎只能刮擦22页。如果我从第1页开始,它将停止在第21页。如果我从第21页开始,那么它将停止在第41页。...没有异常,并且需要抓取的结果。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

1。

您在a46b598上共享的GitHub上的代码可能与您在本地为示例作业提供的确切版本不同。例如。我还没有观察到<timestamp> [guba] INFO: <url>之类的日志行。 但是,我认为没有太大的区别。

2。

在遇到任何问题时,建议将日志级别配置为DEBUG。

3。

如果您已将日志级别配置为DEBUG,则可能会看到以下内容: 2018-10-26 15:25:09 [scrapy.downloadermiddlewares.redirect] DEBUG: Discarding <GET http://guba.eastmoney.com/topic,600000_22.html>: max redirections reached 其他几行:https://gist.github.com/starrify/b2483f0ed822a02d238cdf9d32dfa60e

发生这种情况是因为您将完整的response.meta字典传递给以下请求(related code),而Scrapy的RedirectMiddleware依赖于某些元值(例如“ redirect_times”和“ redirect_ttl” “)进行检查。

解决方案很简单:仅将所需的值传递到next_request.meta

4。

还观察到您正在尝试旋转用户代理字符串,这可能是为了避免Web爬网禁令。但是没有采取其他行动。那会使您的请求仍然混乱,因为:

  • 默认情况下,Scrapy的cookie管理处于启用状态,它将对您的所有请求使用相同的cookie jar。
  • 您的所有请求都来自相同的源IP地址。

因此,我不确定这是否足以使您正确刮取整个网站,尤其是在您不限制请求的情况下。