即使在scrapy中使用代理的旋转,也无法摆脱有问题的页面

2024-06-28 20:46:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

在请求库中使用代理时不会发生这种情况。更清楚地说,在使用requests库时,脚本确实遇到了这个页面/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()

如何让脚本不遇到该页面?

PS我在text file中附加了一些链接,以防有人想尝试一下


Tags: csvself脚本代理链接addressresponselink
1条回答
网友
1楼 · 发布于 2024-06-28 20:46:36

为scrapy应用程序实现会话安全代理 需要添加额外的cookiejar元键,以将代理分配给request.meta的位置,如下所示:

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

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

answer中提到的scrapy代理实现的相关细节

相关问题 更多 >