我正在抓取一个其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页开始。
我不确定还有什么尝试。我不知道什么时候可以关闭代理服务器或其他设备。感谢您的任何建议。
答案 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}