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

Scrapy爬取网站Decizia de intrare字段仅返回标签无实际值问题

Scrapy爬取律师协会信息字段提取错误修复

问题根因

  • XPath定位逻辑错误:目标字段Decizia de intrare的标签文本和对应值同属一个<p>标签,原代码全局查找<em class="ral_i">标签会匹配到页面其他位置的无关元素,无法拿到对应值。
  • 冗余依赖问题:列表页解析额外引入BeautifulSoup,Scrapy自带的选择器性能更好,完全可以替代BS4完成链接提取。
  • 变量作用域风险:原代码将存储字段的d1定义为类全局变量,爬虫并发请求时会出现不同页面数据互相覆盖的问题。

修正逻辑

找到包含Decizia de intrare:文本的p标签后,直接提取该标签下的所有文本内容,做首尾去空、多余空白合并处理,即可拿到完整的字段值。

修正后完整代码

import scrapy
from scrapy.http import Request


class TestSpider(scrapy.Spider):
    name = 'test'
    start_urls = ['https://www.baroul-bucuresti.ro/index.php?urlpag=tablou-definitivi&p=1']
    
    def parse(self, response):
        base_url = 'https://www.baroul-bucuresti.ro'
        # 用Scrapy原生选择器提取详情页链接,移除冗余BS4依赖
        link_list = response.css('div.panel-title a::attr(href)').getall()[1:]
        for href in link_list:
            yield Request(base_url + href, callback=self.parse_book)

    def parse_book(self, response):
        lawyer_info = {}
        lawyer_info['name'] = response.xpath("//h1//text()").get().strip()
        # 遍历详情页信息块的p标签匹配目标字段
        info_p_list = response.xpath("//div[@class='av_bot_left left']//p")
        for p_tag in info_p_list:
            p_content = ' '.join([t.strip() for t in p_tag.xpath(".//text()").getall()]).strip()
            if 'Decizia de intrare:' in p_content:
                lawyer_info['entry_decision'] = p_content
                break
        # 控制台打印验证提取结果
        print(lawyer_info['entry_decision'])
        yield lawyer_info

效果验证

针对提供的示例详情页,代码可正确提取到目标值:Decizia de intrare: 2469/1-06.12.16,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:16:00