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

Scrapy爬虫无法获取DVLA车牌价格数据求助(原Selenium用户)

问题解决:Scrapy爬取DVLA车牌价格XPath失效问题

你的爬虫无法获取价格数据,核心问题出在XPath路径错误、语法错误,以及类属性引用问题上。结合你提供的HTML结构,下面是具体修正方案:

问题点分析

  • XPath层级错误:目标HTML中<a>和<p class="resultsstripprice">是同级节点,都属于div.resultsstrip容器,但你原代码里的div[@class="resultsstrip"]/a/p是在<a>标签内找<p>,和实际结构完全不符。
  • XPath语法错误:p[@class="resultsstripprice"/text()]缺少闭合方括号,正确写法应为p[@class="resultsstripprice"]/text()。
  • 变量与路径引用错误:类属性plate_num在parse方法中需用self.plate_num引用;循环内的XPath应使用相对路径(开头加.),否则会从根节点重新查找。

修正后的完整代码

import scrapy

class QuotesSpider(scrapy.Spider):
    name = 'quotes'
    plate_num = "EA66LEE"
    start_urls = [
        f'https://dvlaregistrations.dvla.gov.uk/search/results.html?search={plate_num}&action=index&pricefrom=0&priceto=&prefixmatches=&currentmatches=&limitprefix=&limitcurrent=&limitauction=&searched=true&openoption=&language=en&prefix2=Search&super=&super_pricefrom=&super_priceto='
    ]

    def parse(self, response):
        # 遍历每个结果容器
        for strip in response.xpath('//div[@class="resultsstrip"]'):
            # 提取并处理车牌文本(去除空格)
            plate_text = strip.xpath('.//a[@class="resultsstripplate plate"]/text()').get().strip()
            # 匹配目标车牌(兼容页面带空格的格式)
            if plate_text.replace(" ", "") == self.plate_num:
                # 从当前容器下提取价格
                price = strip.xpath('.//p[@class="resultsstripprice"]/text()').get().strip()
                yield {
                    'plate number': self.plate_num,
                    'price': price
                }

关键修改说明

  1. 用//div[@class="resultsstrip"]定位每个结果条容器,确保遍历所有可能的匹配项。
  2. 先验证车牌匹配性,避免爬取无关数据(页面可能返回多个相似车牌结果)。
  3. 采用相对路径.//p[@class="resultsstripprice"]/text()从当前容器内查找价格,确保路径精准。
  4. 修正了类属性plate_num的引用方式,添加self.前缀。

你可以先在Scrapy Shell中测试XPath:

scrapy shell "你的目标URL"
# 测试价格提取XPath
response.xpath('//div[@class="resultsstrip"]//p[@class="resultsstripprice"]/text()').get()

内容的提问来源于stack exchange,提问作者xlmaster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:06:04