Параметры Scrapy для метода парсинга - PullRequest
0 голосов
/ 13 ноября 2018

Я пишу веб-сканер с Python Scrapy, который просматривает несколько страниц каталога тегов и получает все теги и их статьи.

Итак, я получил этот метод разбора, при котором паук пробегает каждую страницу.

def parse_word(self, response):

     # look for all tags on this site
     tagscount = response.xpath('someXpath').extract()

     # check if there is a nextPage
     nextPage = response.css('somecssSelector').extract()
     lastPage = response.css('somecssSelector').extract()

     # Open every tagsite and crawl it if all tags are gained
     if not nextPage or lastPage:

         for tag in tagscount:

             # call parse method for article crawling
             data = scrapy.Request(url=tag, callback=self.parse_subpage)
             yield data

     # If there is a nextPage with tags request with this method recursively
     else:

         # a little bit of formatting for linktype
         nextPageStr = str(nextPage)
         cutNextPageStr = nextPageStr.replace("[","")
         cutNextPageStr = cutNextPageStr.replace("]", "")
         cutNextPageStr = cutNextPageStr.replace("'", "")
         link = urljoin(response.url, cutNextPageStr)

         # Call this method again --> here i want to set a parameter tagscount or something like this
         data = scrapy.Request(url=link, callback=self.parse_word)
         yield data

В разделе else я хочу дать методу parse_word полученные теги, но весь метод принимает только теги последнего сайта.

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 14 ноября 2018

Чтобы предложить альтернативное решение, вы можете использовать промежуточное программное обеспечение spider для выполнения подсчета, которое будет храниться в мета-словаре запроса / ответа.

Это немного чище в том смысле, что ответственность за подсчет отделена от ответственности за выбор элементов на странице.

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