【发布时间】:2018-04-26 07:02:16
【问题描述】:
我正在抓取这个 asp.net 站点,因为请求 url 是相同的,所以 Scrapy dupefilter 不起作用。结果,我得到了大量重复的 url,这使我的蜘蛛无限运行。我该如何处理?
我的代码如下所示。
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 或更少。
【问题讨论】:
-
我认为在这里收集 url 不是最好的方法,当你点击另一个页面时页面 url 通常会发生变化,如果没有,请打开网络选项卡,单击链接,查看提出的请求并将其复制到scrapy中。如果您提供链接,我很乐意查看它
-
@Rafael Almeida 感谢您的回复。我没有收集网址。我正在收集页码,这是我能想到的唯一唯一标识符。看起来它到目前为止有效。
标签: asp.net python-2.7 web-scraping scrapy