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

使用Python requests与XPath提取链接结果与浏览器显示不一致问题求助

问题原因

  • 页面内a标签的href属性本身存储的是相对路径,没有包含域名、上级路径前缀。浏览器访问页面时会自动将相对路径和当前页面的基准URL拼接为完整可访问路径,lxml直接提取属性值不会自动做这一步拼接,因此只能拿到后半段路径。
  • 原始属性值里的空格没有做URL编码,浏览器渲染链接时会自动对URL内的特殊字符做百分号编码,将空格转换为%20,这也是爬取结果和浏览器显示有差异的原因之一。

解决方法

使用Python标准库urllib.parse的urljoin方法拼接绝对路径,同时可以用quote方法做标准化URL编码,参考代码如下:

import requests
from lxml import html
from urllib.parse import urljoin, quote

# 定义当前爬取页面的基准URL
base_url = "http://kenyalaw.org:8181/exist/kenyalex/actview.xql?actid=CAP.%2016"
r = requests.get(base_url)
data = html.fromstring(r.content)
# 提取相对路径
relative_href = data.xpath("//div[@class='subleg']/a/@href")[0]
# 拼接生成绝对路径
full_url = urljoin(base_url, relative_href)
# 标准化编码,仅转义空格等特殊字符,保留URL必要符号
full_url_encoded = quote(full_url, safe=':/?=&')
print(full_url_encoded)

运行上述代码即可输出和浏览器显示一致的完整链接。

内容的提问来源于stack exchange,提问作者Ciric Aleksandar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:36:06