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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:21:55