You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Scrapy运行c21.py脚本无法填充item、无爬取数据返回问题排查

问题原因

  • rules属性类型错误。Scrapy的CrawlSpider要求rules必须为列表类型,你代码中错误使用了大括号{}定义为集合类型,导致规则完全未生效,爬虫爬完起始页后没有执行任何链接提取和跟进逻辑,直接结束运行。
  • 详情页匹配规则过严。你设置的allow=r'/propiedad/4'仅能匹配路径中包含/propiedad/4的链接,绝大多数房源详情页不会命中该规则,即便规则生效也很难匹配到可爬取的详情页。
  • 可选优化点:你在类中直接定义的user_agent可能未生效,部分反爬站点会拦截Scrapy默认UA的请求,不过从你提供的日志看起始页返回200,所以这个不是本次的核心问题。

修复方案

第一步:修改代码核心错误

修正后的完整代码如下:

from scrapy.item import Field, Item 
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.loader import ItemLoader

class inmueble(Item):
    link = Field()
    precio = Field()
    
class QuotesSpider(CrawlSpider):
    name='century21'
    allowed_domains=['century21mexico.com']
    start_urls=['https://century21mexico.com/busqueda/tipo_departamento-o-penthouse/operacion_venta/uso_habitacional/']
    # 配置自定义UA确保不会被反爬拦截
    custom_settings = {
        'USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36',
    }
    
    # 1. 把大括号改为列表/元组格式
    rules = (
        Rule(LinkExtractor(allow=r'/pagina_'), follow=True),
        # 2. 修改详情页匹配规则,匹配所有/propiedad/开头的链接,callback规则不需要额外加follow=True
        Rule(LinkExtractor(allow=r'/propiedad/'), callback='parse_item'),
    )
    
    def parse_item(self, response):
        item = ItemLoader(item=inmueble(), response=response)
        item.add_value('link', response.request.url)
        item.add_xpath('precio', '//*[@class="col-sm-12 h5"][2]/text()')
        yield item.load_item() 

第二步:执行命令调整

运行时可以添加输出参数直接查看爬取结果:

scrapy runspider c21.py -o result.csv

执行后会在脚本同级目录生成result.csv文件,里面就是你需要的link和precio字段内容。

内容的提问来源于stack exchange,提问作者Ramiro Guzmán

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:51:01