Сделать CrawlSpider обрабатывать данные на домашней странице + другие извлеченные ссылки - PullRequest
0 голосов
/ 09 июля 2020

Я ползаю широким ползком. Мне нужно обработать несколько страниц для каждого веб-сайта, чтобы установить значения для одного из примерно 20 правил классификации. Например, одно правило классификации - «Имеет номер телефона» (запускает регулярное выражение, чтобы увидеть, есть ли номер телефона в источнике страницы, и возвращает логическое значение). Правила реализованы в функции, называемой parse_page ().

Мне нужно, чтобы CrawlSpider запускал parse_page () на домашней странице каждого просканированного веб-сайта, а также на других общих страницах, таких как страница о странице, страница контактов, конфиденциальность page policy, et c.

Когда я запускаю паука, он начинается с some-site.com и захватывает страницы в соответствии с определениями правил в приведенном ниже коде.

Моя проблема заключается в том, что мне нужно parse_page () для запуска на домашней странице some-site.com (parse_page () в настоящее время работает только на some-site.com/contact-us, some-site.com/about -us, et c.). Тогда мой вопрос: Как мне указать Rule () для включения домашней страницы сайта, чтобы parse_page () вызывалась для домашней страницы, а также для других уже включенных страниц?

class SomeBotSpider(scrapy.spiders.CrawlSpider):
     name = 'some_bot'
     allowed_domains = ['some-site.com']
     start_urls = ['https://some-site.com/']


      rules = (
         Rule(LinkExtractor(allow='/contact'), callback='parse_page', follow=True),
         Rule(LinkExtractor(allow='disclaimer'), callback='parse_page', follow=True),
         Rule(LinkExtractor(allow='disclosure'), callback='parse_page', follow=True),
         Rule(LinkExtractor(allow='/about'), callback='parse_page', follow=True),
         Rule(LinkExtractor(allow='privacy'), callback='parse_page', follow=True),
     )

1 Ответ

0 голосов
/ 09 июля 2020

Вам необходимо переопределить метод parse_start_url паука. Первый запрос к веб-сайту (URL-адрес домашней страницы) обрабатывается методом parse_start_url. Вы можете вызвать parse_page внутри метода parse_start_url . Примерно так:

class SomeBotSpider(scrapy.spiders.CrawlSpider):
    name = 'some_bot'
    allowed_domains = ['some-site.com']
    start_urls = ['https://some-site.com/']


    rules = (
         Rule(LinkExtractor(allow='/contact'), callback='parse_page', follow=True),
         Rule(LinkExtractor(allow='disclaimer'), callback='parse_page', follow=True),
         Rule(LinkExtractor(allow='disclosure'), callback='parse_page', follow=True),
         Rule(LinkExtractor(allow='/about'), callback='parse_page', follow=True),
         Rule(LinkExtractor(allow='privacy'), callback='parse_page', follow=True),
     )

    def parse_start_url(self, response):
        return self.parse_page(response)

Надеюсь, это поможет.

...