我使用 scrapy 創(chuàng)建了一個(gè)腳本,在其中實(shí)現(xiàn)代理輪換,以解析address數(shù)百個(gè)類似的鏈接,如下所示。我已經(jīng)從腳本中的 csv 文件提供了這些鏈接。該腳本運(yùn)行良好,直到遇到任何像這樣的響應(yīng) url https://www.bcassessment.ca//Property/UsageValidation。鑒于一旦腳本開(kāi)始獲取該鏈接,它就無(wú)法繞過(guò)該鏈接。僅供參考,我使用包含的元屬性來(lái)lead_link使用原始鏈接而不是重定向鏈接作為重試,因此我應(yīng)該能夠繞過(guò)該障礙。當(dāng)我在請(qǐng)求庫(kù)中使用代理時(shí),不會(huì)發(fā)生這種情況。更清楚地說(shuō) - 在使用請(qǐng)求庫(kù)時(shí),腳本確實(shí)遇到此頁(yè)面/Property/UsageValidation,但在幾次重試后成功繞過(guò)該頁(yè)面。蜘蛛就像: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()如何讓腳本不遇到該頁(yè)面?PS:我在文本文件中附加了一些鏈接,以防有人想嘗試。
1 回答

忽然笑
TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
要為 scrapy 應(yīng)用程序?qū)崿F(xiàn)會(huì)話安全代理實(shí)現(xiàn),您需要添加額外的cookiejar
元鍵來(lái)放置代理分配的位置,request.meta
如下所示:
.... yield?scrapy.Request(url=link,?meta?=?{"proxy":address,?"cookiejar":address})
在這種情況下,scrapycookiesMiddleware
將為每個(gè)代理創(chuàng)建額外的 cookieSession。
添加回答
舉報(bào)
0/150
提交
取消