Python使用XPath获取指定class的a标签href返回空值如何解决
问题根因
你写的XPath表达式存在重复嵌套a标签选择的逻辑错误:你已经定位到了class为dropdown-item的a标签,后续又加了//a去查找该a标签内部的子a标签,而HTML规范里a标签不允许嵌套,自然匹配不到任何内容,所以返回空。
正确的XPath写法
直接把筛选href的条件合并到dropdown-item的a标签筛选里即可,末尾加/@href直接提取href属性值:
//div[@class='dropdown-menu']//a[@class='dropdown-item' and contains(@href, 'category')]/@href
如果是用Scrapy框架的response.xpath提取,写完表达式后调用.get()(拿第一个匹配结果)或者.getall()(拿所有匹配结果)获取实际值即可,示例代码:
# 提取所有符合条件的href属性值 href_list = response.xpath("//div[@class='dropdown-menu']//a[@class='dropdown-item' and contains(@href, 'category')]/@href").getall()
额外适配场景说明
- 如果元素class存在多个值(比如
class="dropdown-item active"这种复合类名),可以用contains(@class, 'dropdown-item')代替精确匹配@class='dropdown-item',避免漏匹配 - 如果提取到的href是相对路径,可以用
response.urljoin(提取到的href)补全为绝对路径,方便后续发起请求
内容的提问来源于stack exchange,提问作者jumbotrone
相关产品推荐
相关产品推荐

