Скрап питон CrawlSpider не ползет - PullRequest
0 голосов
/ 24 апреля 2019
import scrapy 
from scrapy.spiders.crawl import CrawlSpider, Rule 
from scrapy.linkextractors import LinkExtractor 

class MySpider(CrawlSpider):
    name = 'genericSpider'
    allowed_domains = ['example.com']
    start_urls = [url_1, url_2, url_3]

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

    def parse(self, response): 
        hxs = scrapy.Selector(response)
        links = hxs.xpath('*//a/@href').extract()
        for link in links:
            print(link)
        print()

Я пытаюсь сканировать веб-сайт. Для примера моего кода я просто извлекаю все ссылки и распечатываю их на терминал.

Этот процесс прекрасно работает для URL-адресов в start_urls, но не похоже, что паук будет сканировать извлеченные URL-адреса.

Это точка CrawlSpider, верно? посетить страницу, собрать ее ссылки и посещать все эти ссылки, пока они не закончатся?

Я застрял на несколько дней, любая помощь была бы отличной.

1 Ответ

1 голос
/ 24 апреля 2019

Проблема в том, что вы называете свой метод parse. Согласно документации , это имя следует избегать в случае использования CrawlSpider, так как это приводит к проблемам. Просто переименуйте метод, например parse_link (и настройте аргумент callback в Rule), и он будет работать.

Также помните, что атрибут allowed_domains должен совпадать с URL-адресами, которые вы собираетесь сканировать.

...