Дубликаты в нумерации страниц asp.net при соскобе? - PullRequest
0 голосов
/ 26 апреля 2018

Я очищаю этот сайт asp.net, и так как URL-адрес запроса тот же, Scrapy dupefilter не работает.В результате я получаю тонны дублированных URL, которые заставляют моего паука бесконечно бегать.Как я могу справиться с этим?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 голосов
/ 26 апреля 2018

Я не уверен, правильно ли я вас понял, но asp.net обычно полагается на куки для доставки контента.Поэтому при сканировании сайтов asp.net вы хотите использовать функцию cookiejar для scrapy:

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
        )

Подробнее о cookiejar читайте здесь: https://doc.scrapy.org/en/latest/topics/downloader-middleware.html?highlight=cookiejar#multiple-cookie-sessions-per-spider

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...