Scrapy не сканирует весь сайт - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь сканировать весь сайт с помощью системы аутентификации. Все работает правильно без моего auth func. Когда я использую свой auth func, scrapy login и сканирует только главную страницу. Почему не сканируются все ссылки, определенные в разделе «Правила»?

from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy.http import Request, FormRequest


class TSpider(CrawlSpider):
    name = 't'
    allowed_domains = ['domain.net']
    start_urls = ['http:// domain.net/']
    login_page = 'http:// domain.net/login.php'

    rules = (
        Rule(LinkExtractor(), callback='parse_item', follow=True),
    )

    def start_requests(self):
        yield Request(url=self.login_page, callback=self.login, dont_filter=True)


    def login(self, response):
        return FormRequest.from_response(response,
                                         formdata={'login_username': 'login',
                                                'login_password': 'password'},
                                         callback=self.parse_item)

    def parse_item(self, response):
        item = {}
        item['title'] = response.xpath('//head/title/text()').extract()
        item['url'] = response.url
        return item

Ответы [ 2 ]

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

Правила применяются только к ответам, обработанным обратным вызовом по умолчанию, parse().

Замените self.parse_item на self.parse или оставьте параметр вне, так как parse() является обратным вызовом по умолчанию.

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

У меня есть подсказка. Я просто избавился от обратного вызова в моей функции входа в систему, и все идет как надо. Но кто-нибудь мне это объясняет?

    def login(self, response):
    return FormRequest.from_response(response,
                                     formdata={'login_username': 'login',
                                            'login_password': 'password'},
                                     )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...