刮刮时在asp.net分页中重复?

时间:2018-04-26 07:02:16

标签: asp.net python-2.7 web-scraping scrapy

我正在抓取这个asp.net网站,因为请求url是相同的Scrapy dupefilter不起作用。结果我得到了大量重复的网址,让我的蜘蛛进入了无限运行。我怎么处理它? enter image description here

我的代码看起来像这样。

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或更少。

1 个答案:

答案 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