【发布时间】:2021-01-22 14:22:17
【问题描述】:
我创建了一个脚本,使用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 中附上了一些链接,以防有人想尝试一下。
【问题讨论】:
-
这看起来奇怪地类似于this。你们认识吗?
-
这与我期望在这里使用scrapy @baduker 的解决方案有什么关系吗?两天前我遇到了你的划线帖子并试图解决它,但不幸的是失败了。但是,我想用scrapy解决它但没有运气,所以我创建了这篇文章来找出我做错了什么。谢谢。
-
看起来该网站并不想被抓取,这是完全合理的,正如我们在这里看到的那样,您不是第一个尝试这样做的人。如果它适用于
requests,那么坚持下去也许是个好主意。正如我在answer 中所说的那样,抓取的主要目标是保持低调。 -
由于 requests 库可以做到,scrapy 有什么问题?这就是为什么我有兴趣寻求解决方案的原因。此外,我没有遇到其他帖子的两个错误。谢谢。
-
对于
requests中的代理池实现,您可能为每个requests.Session对象设置proxy。使用默认设置的 Hovewer scrapy 应用程序将对所有代理使用单个会话cookieJarobject`。
标签: python python-3.x web-scraping scrapy