Scrapy爬取指定页面地址字段返回None问题求解
无法提取地址的核心原因
- 定位锚点选择错误:你使用的
col-md-12是Bootstrap框架的通用布局类,整个页面有数十个带该class的div,XPath会默认匹配到页面源码里第一个符合条件的节点,该节点下根本不存在你要的地址内容。 - Xpath路径逻辑错误:目标页面的律师信息是按条目独立排布的,每个律师的地址字段在专属条目容器内,你写的
p[1]//text()[2]路径没有绑定条目容器,匹配到的是页面头部公共区域的无关文本节点,自然返回None。 - 未考虑文本格式:地址文本前带有固定前缀
Adresa:,且文本前后存在大量换行、空格类空白字符,直接取固定位置的文本节点容错率极低。
正确实现代码
直接替换原有爬虫逻辑即可,代码会遍历所有律师条目,精准提取每个律师的地址信息:
import scrapy class TestSpider(scrapy.Spider): name = 'test' start_urls = ["https://www.baroulconstanta.ro/tabloul-avocatilor/avocati-definitivi/"] def parse(self, response): # 定位所有律师条目专属容器,避开通用布局类的干扰 lawyer_list = response.xpath("//div[contains(@class, 'avocat-row')]") for lawyer in lawyer_list: # 按地址的固定特征匹配文本,避免固定位置匹配的容错问题 raw_address = lawyer.xpath(".//p[contains(normalize-space(.), 'Adresa:')]/text()").get() # 清洗前缀和多余空白 address = raw_address.replace("Adresa:", "").strip() if raw_address else None print(address) yield { "address": address }
补充注意事项
- 如果运行后仍返回空,先检查Scrapy默认请求头是否被站点拦截,可在
settings.py中替换为浏览器真实User-Agent,将ROBOTSTXT_OBEY设为False,适当调低请求频率。 - 禁止直接用
col-md-*这类全局通用布局类作为唯一XPath定位锚点,优先选带业务语义的class、id或者文本特征作为定位依据。
内容的提问来源于stack exchange,提问作者Amen Aziz
相关产品推荐
相关产品推荐

