刮擦刮擦被关闭

时间:2019-07-18 23:15:10

标签: python scrapy

我正在抓取一个其robots.txt允许抓取的网站。在过去的几周里,我注意到我已经关闭,这几个月来我一直在毫无问题地抓取数据。我开始使用代理来解决这个问题,但是现在,几分钟之内我也就关闭了代理。

有没有一种方法可以告诉我是否正在抓取0个页面,以便可以切换到新的代理IP?

这就是我在输出中看到的。

[scrapy] INFO: Crawled 233 pages (at 233 pages/min), scraped 0 items (at 0 items/min)
[scrapy] INFO: Crawled 233 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
[scrapy] INFO: Crawled 233 pages (at 0 pages/min), scraped 0 items (at 0 items/min)

以下是我一直在使用的一些自定义设置。我正在设置下面未显示的HTTP_PROXY。

custom_settings = {
	'DOWNLOADER_MIDDLEWARES':{
	    'crawlers.middlewares.ProxyMiddleware': 410
	},
	'CONCURRENT_REQUESTS_PER_DOMAIN': 10,
	'DOWNLOAD_DELAY': 0.250,
	'RANDOMIZE_DOWNLOAD_DELAY': True,
	'ITEM_PIPELINES': {
	    'crawlers.pipelines.Validator.Validator': 300,
	    'crawlers.pipelines.Formatter.Formatter': 400,
	    'crawlers.pipelines.persist.Persist': 500
	}
}

我有1000页要抓取(或多或少)。每页将要刮取0-N个项目。当我的抓取工具从第1页开始时,是否有办法知道第1页上的所有项目是否都已被抓取,以便可以将第1页标记为已完成?这样,如果刮擦在第2页上失败,那么我知道下一次刮擦时,我应该使用新代理从第2页开始。

我不确定还有什么尝试。我不知道什么时候可以关闭代理服务器或其他设备。感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

有没有办法查看您是否正在使用其他IP进行爬网,是:

class MySpider(scrapy.Spider):
    start_urls = ['https://www.iplocation.net/find-ip-address']

    def start_requests(self):
        for x in range(1, 50):
            yield scrapy.Request(self.start_urls[0], callback=self.parse)

    def parse(self, response):
        ip = response.css(':contains("Your IP Address")').xpath('../span/text()').extract_first()
        yield {"ip": ip}