首页 > 解决方案 > 我对 LinkExtractor 属性(restrict_xpath)做错了吗?不做回调

问题描述

我正在测试在网站上设置蜘蛛的规则,以便输入每个项目的 url,从每个项目获取信息,然后按照分页,在这种情况下是无限滚动。但首先我想为 Callback 创建一个规则,让它在每次找到一个项目时都会被调用,但问题是,它不会用于回调。

我也尝试了使用最小表达式的 allow() ,但仍然一无所获。我得到任何东西的唯一一次是如果我将 allow() 和 retric_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”。

标签: pythonscrapy

解决方案


这里的主要问题是您使用的选择器 ( //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', 
)

编辑:

一些链接:


推荐阅读