【发布时间】:2018-10-24 23:37:02
【问题描述】:
我的刮刀有 2 个问题:
尽管我使用
'COOKIES_ENABLED': False和旋转代理,它应该为每个请求提供不同的 IP,但一段时间后它会得到很多 302。我通过在几次 302s 后重新启动刮板解决了它我看到 scraper 成功爬取的次数比它处理的要多得多,我无法用它做任何事情。在下面的示例中,我收到了 121 200 条响应,但只处理了 27。
蜘蛛
class MySpider(Spider):
name = 'MySpider'
custom_settings = {
'DOWNLOAD_DELAY': 0,
'RETRY_TIMES': 1,
'LOG_LEVEL': 'DEBUG',
'CLOSESPIDER_ERRORCOUNT': 3,
'COOKIES_ENABLED': False,
}
# I need to manually control when spider to stop, otherwise it runs forever
handle_httpstatus_list = [301, 302]
def start_requests(self):
for row in self.df.itertuples():
yield Request(
url=row.link,
callback=self.parse,
priority=100
)
def close(self, reason):
self.logger.info('TOTAL ADDED: %s' % self.added)
def parse(self, r):
if r.status == 302:
# I need to manually control when spider to stop, otherwise it runs forever
raise CloseSpider("")
else:
# do parsing stuff
self.added += 1
self.logger.info('{} left'.format(len(self.df[self.df['status'] == 0])))
输出
2018-08-08 12:24:24 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://mytarget.com/url1> (referer: None)
2018-08-08 12:24:24 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://mytarget.com/url2> (referer: None)
2018-08-08 12:24:24 [MySpider] INFO: 52451 left
2018-08-08 12:24:24 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://mytarget.com/url3> (referer: None)
2018-08-08 12:24:24 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://mytarget.com/url4> (referer: None)
2018-08-08 12:24:24 [MySpider] INFO: 52450 left
2018-08-08 12:24:24 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://mytarget.com/url4> (referer: None)
2018-08-08 12:24:37 [MySpider] INFO: TOTAL ADDED: 27
2018-08-08 12:24:37 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/exception_count': 1,
...
...
'downloader/response_status_count/200': 121,
'downloader/response_status_count/302': 4,
它成功抓取了很多(3x 或 4x 倍于抓取)。 如何强制处理已抓取的所有内容?
我可以牺牲速度,但我不想浪费成功爬取的200s
【问题讨论】:
-
如果你打开302指向的页面,你看到了什么?
-
重定向到验证码页面
-
好吧,我想这不是你能控制的。回复:缺少的 200,你确定你没有在解析的早期返回,在你增加
self.added之前? -
1.我100%确定它没有被解析。 2.scrape真的很奇怪,但是不解析就退出了。我相信一定有办法控制它
-
抱歉,我在代码中看不到任何会导致此问题的内容!
标签: python scrapy scrapy-spider