我正在抓取这个asp.net站点,因为请求url是相同的抓取dupefilter不起作用。结果,我得到了大量重复的urls,这让我的爬虫进入了无限的运行状态。我该怎么处理呢?
我的代码如下所示。
if '1' in page:
target = response.xpath("//a[@class = 'dtgNormalPage']").extract()[1:]
for i in target:
i = i.split("'")[1]
i = i.replace('$',':')
yield FormRequest.from_response(response,url, callback = self.pages, dont_filter = True,
formdata={'__EVENTTARGET': i,
})
我试图添加一个集合来跟踪页码,但不知道如何处理'...‘这就引出了下10页。
if '1' in page:
target = response.xpath("//a[@class = 'dtgNormalPage']")
for i in target[1:]:
page = i.xpath("./text()").extract_first()
if page in self.pages_seen:
pass
else:
self.pages_seen.add(page)
i = i.xpath("./@href").extract_first()
i = i.split("'")[1]
i = i.replace('$',':')
yield FormRequest.from_response(response,url, callback = self.pages, dont_filter = True,
formdata={'__EVENTTARGET': i,
})
self.pages_seen.remove('[ ... ]')
我设置的线程越多,收到的副本就越多。因此,到目前为止,似乎唯一的解决方案是将thread_count降低到3或更少。
发布于 2018-04-26 09:51:52
我不确定我是否理解正确了,但asp.net通常很大程度上依赖cookies来传递内容。所以在抓取asp.net网站时,你需要使用scrapy的cookiejar特性:
class MySpider(Spider):
name = 'cookiejar_asp'
def start_requests():
for i, url in enumerate(start_urls):
yield Request(url, meta={'cookiejar': i})
def parse(self, response):
# Keep in mind that the cookiejar meta key is not “sticky”. You need to keep passing it along on subsequent requests. For example:
return Request(
"http://www.example.com/otherpage",
callback=self.parse_other_page
meta={'cookiejar': response.meta['cookiejar']}, # <--- carry over cookiejar
)
有关cookiejars的更多信息,请单击此处:https://doc.scrapy.org/en/latest/topics/downloader-middleware.html?highlight=cookiejar#multiple-cookie-sessions-per-spider
https://stackoverflow.com/questions/50036740
复制相似问题