我正在抓取这个asp.net网站,因为请求url是相同的Scrapy dupefilter不起作用。结果我得到了大量重复的网址,让我的蜘蛛进入了无限运行。我怎么处理它?
我的代码看起来像这样。
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或更少。
答案 0 :(得分:0)
我不确定我是否正确地理解了你,但asp.net通常会依赖cookie来提供内容。所以在抓取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