Как сканировать весь сайт, переходя по ссылкам с помощью CrawlSpider? - PullRequest
0 голосов
/ 17 июня 2019

Я понял, что при использовании CrawlSpider с правилом LinkExtractor выполняется только анализ связанных страниц, но не самой начальной страницы.

Например, если http://mypage.test содержит ссылки на http://mypage.test/cats/ и http://mypage.test/horses/, сканер будет анализировать страницу "Кошки и лошади" без разбора http://mypage.test. Вот простой пример кода:

from scrapy.crawler import CrawlerProcess
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor


class MySpider(CrawlSpider):
    name = 'myspider'
    start_urls = ['http://mypage.test']

    rules = [
        Rule(LinkExtractor(), callback='parse_page', follow=True),
    ]

    def parse_page(self, response):
        yield {
            'url': response.url,
            'status': response.status,
        }


process = CrawlerProcess({
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
    'ITEM_PIPELINES': {
        'pipelines.MyPipeline': 100,
    },
})
process.crawl(MySpider)
process.start()

Моя цель - проанализировать каждую страницу на сайте, перейдя по ссылкам. Как мне это сделать?

Очевидно, CrawlSpider с правилом LinkExtractor анализирует только связанные страницы, но не саму начальную страницу.

1 Ответ

0 голосов
/ 17 июня 2019

Удалить start_urls и добавить:

def start_requests(self):
    yield Request('http://mypage.test', callback="parse_page")
    yield Request("http://mypage.test", callback="parse")

CrawlSpider использует self.parse для извлечения и перехода по ссылкам.

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