即使在刮擦中使用代理轮换也无法摆脱有问题的页面



我创建了一个脚本,使用scrapy实现了其中代理的旋转,来解析数百个类似链接中的address。我已经从脚本中的csv文件中提供了这些链接。

脚本运行良好,直到遇到任何像https://www.bcassessment.ca//Property/UsageValidation这样的响应url。考虑到一旦脚本开始获取该链接,它就无法绕过它。仅供参考,我使用包含lead_link的元属性来使用原始链接,而不是重定向链接作为重试,所以我应该能够绕过这个障碍。

当我在请求库中使用代理时,不会发生这种情况。更清楚地说,在使用请求库时,脚本确实遇到了这个页面/Property/UsageValidation,但在几次重试后成功绕过了它。

蜘蛛就像:

class mySpider(scrapy.Spider):
name = "myspider"
custom_settings = {
'DOWNLOADER_MIDDLEWARES': {
'stackoverflow_spider.middlewares.ProxiesMiddleware': 100,
}
}
def start_requests(self):
with open("output_main.csv","r") as f:
reader = csv.DictReader(f)
for item in list(reader):
lead_link = item['link']
yield scrapy.Request(lead_link,self.parse,meta={"lead_link":lead_link,"download_timeout":20}, dont_filter=True)
def parse(self,response):
address = response.css("h1#mainaddresstitle::text").get()
print(response.meta['proxy'],address)
if __name__ == "__main__":
c = CrawlerProcess({
'USER_AGENT':'Mozilla/5.0',
'LOG_LEVEL':'ERROR',
})
c.crawl(mySpider)
c.start()

我如何才能让脚本不遇到那个页面

附言:我在一个文本文件中附上了一些链接,以防有人想试试。

为scraby应用程序实现会话安全代理需要添加额外的cookiejar元密钥来放置您为request.meta分配代理的位置,如下所示:

....
yield scrapy.Request(url=link, meta = {"proxy":address, "cookiejar":address})

在这种情况下,scrabycookiesMiddleware将为每个代理创建额外的cookieSession。

这个答案中提到的scrapy代理实现的相关细节

最新更新