Правило скрапа следовать всем страницам сайта - PullRequest
0 голосов
/ 14 апреля 2020

Я написал простого паука, которому я хочу перейти по всем ссылкам в домене (в данном примере amazon.com), это мой код до сих пор

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from urllib.parse import urlparse
from scrapy.utils.response import open_in_browser
class ExampleSpider(CrawlSpider):
    name = 'example'
    allowed_domains = ['amazon.com']
    rules = (
        Rule(LinkExtractor(allow='',
            deny_extensions=['7z', '7zip', 'apk', 'bz2', 'cdr,' 'dmg', 'ico,' 'iso,' 'tar', 'tar.gz','pdf','docx'],
            ), callback='parse_item', follow=True,
            ),
    )
    custom_settings = {'LOG_ENABLED':True}
    def start_requests(self):
        #print(self.website)
        url = 'https://www.amazon.com/s?k=water+balloons'
        yield scrapy.Request(url,callback=self.parse_item,)

    def parse_item(self,response):
        #open_in_browser(response)
        print(response.url)

Я проверил этот вопрос, но ответ не сделал ' scrapy следуйте по всем ссылкам и получите статус , я также пытался заменить allow='' на restrict_xpaths='\\a', но это не помогло, любая помощь приветствуется.

Примечание: Это важно, чтобы паук оставался в домене amazon.com

1 Ответ

1 голос
/ 14 апреля 2020

Вы правильно указали правила, но проблема с вашим кодом состоит в том, что вы не вызываете правильный метод внутри вашего start_requests метода.

Для того, чтобы правила сработали, вам нужно отправить первый запрос к встроенному parse методу

как то так:

def start_requests(self):
    #print(self.website)
    url = 'https://www.amazon.com/s?k=water+balloons'
    yield scrapy.Request(url,callback=self.parse)

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

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