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
相关产品推荐
相关产品推荐

