如果调度程序中有很多请求,调度程序会拒绝更多要添加的请求吗?
我遇到了一个非常棘手的问题。我正在尝试抓取所有帖子和评论的论坛。问题是令人毛骨悚然的,似乎永远无法完成工作并退出而没有错误消息。我想知道我是否发出过多请求,以至于scrapy停止产生新请求而只是退出。
但是我找不到文档说,如果计划中的请求过多,scrapy将退出。这是我的代码: https://github.com/spacegoing/sentiment_mqd/blob/a46b59866e8f0a888b43aba6df0481a03136cf21/guba_spiders/guba_spiders/spiders/guba_spider.py#L217
奇怪的是,刮擦似乎只能刮擦22页。如果我从第1页开始,它将停止在第21页。如果我从第21页开始,那么它将停止在第41页。...没有异常,并且需要抓取的结果。
答案 0 :(得分:1)
您在a46b598
上共享的GitHub上的代码可能与您在本地为示例作业提供的确切版本不同。例如。我还没有观察到<timestamp> [guba] INFO: <url>
之类的日志行。
但是,我认为没有太大的区别。
在遇到任何问题时,建议将日志级别配置为DEBUG。
如果您已将日志级别配置为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
。
还观察到您正在尝试旋转用户代理字符串,这可能是为了避免Web爬网禁令。但是没有采取其他行动。那会使您的请求仍然混乱,因为:
因此,我不确定这是否足以使您正确刮取整个网站,尤其是在您不限制请求的情况下。