Я делаю что-то не так с атрибутами LinkExtractor (restrict_xpath)?не делает обратный вызов - PullRequest
0 голосов
/ 16 мая 2019

Я тестирую правила, чтобы настроить паука на веб-сайте, чтобы войти в URL каждого элемента, получить информацию о каждом из них и затем выполнить нумерацию страниц, в этом случае бесконечная прокрутка. Но сначала я хотел создать правило для Callback, который будет вызываться каждый раз, когда он находит элемент, но проблема в том, что он не собирается для обратного вызова.

Я пробовал allow () с минимальным выражением, но до сих пор ничего не получаю. Единственный раз, когда я получаю что-либо, это если я оставляю allow () и limit_xpaths () оба пустыми.

# -*- coding: utf-8 -*-
import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor 
from scrapy.exceptions import CloseSpider


class Bahiaprop1Spider(CrawlSpider):
    name = 'bahiaprop1'
    allowed_domains = ['www.bahiablancapropiedades.com']
    start_urls = ['https://www.bahiablancapropiedades.com/buscar#/terrenos/venta/bahia- 
blanca/todos-los-barrios/rango-min=50.000,rango-max=350.000']

rules = (
    Rule(LinkExtractor(allow = (), restrict_xpaths = ('//div[@class="row"]')),
                        callback = 'parse_item', follow = True),
)


def parse_item(self, response):
    print ('lol')

Я ожидаю, что "lol" будет напечатано.

1 Ответ

1 голос
/ 20 мая 2019

Основная проблема заключается в том, что используемый вами селектор (//div[@class="row"]) сопоставляет только div с одним классом row. Используя выражения XPath, чтобы сопоставить элементы , содержащие , класс немного сложен:

//div[@class and contains(concat(' ', normalize-space(@class), ' '), ' row ')]

или вы могли бы использовать селекторы CSS вместо:

Rule(
    LinkExtractor(allow=(), restrict_css = 'div.row'),
    callback = 'parse_item', 
)

EDIT:

Некоторые ссылки:

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