python - 我对 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”。
解决方案
这里的主要问题是您使用的选择器 ( //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',
)
编辑:
一些链接:
推荐阅读
- c++ - 我对 CDiagramEngDoc *pDoc = (CDiagramEngDoc*)pChild->GetActiveDocument(); 感到困惑
- python-3.x - 使用 ThreadPoolExecutor Python 失败时,如何在任务队列中添加任务
- sql - SQL查询以获取5年间隔
- python - 关于使用列表的 min 和 max 函数
- flutter - 如何解决 Android SDK 仅包含许可证
- process - 内核 /proc/pid/stack 格式,地址是什么意思?
- ios - 如何快速将 UInt32 类型的字节数组写入 OutputStream
- c++ - 如何在 C++ 中读取具有相似名称的文件
- dataflow - Mercari Spanner to Bigquery - QUERY 中无法识别的参数
- c# - 在标准输入上写入子进程,然后在子进程仍在运行时退出父进程