Python lxml模块xpath解析不到内容

起始及经过

爬取某个网站的过程中,发现直接从浏览器按F12的控制台复制的xpath地址什么都获取不到,输出一个空列表,重新检查了xpath路径发现并没有什么问题.

示例网站:https://so.gushiwen.cn/shiwenv_4ef2774ed20a.aspx
演示爬取内容(获取此处的赏析文本):
在这里插入图片描述
初始代码:

from lxml import etree
from requests import Session

url = 'https://so.gushiwen.cn/shiwenv_4ef2774ed20a.aspx'
session = Session()
pageContent = session.get(url).content.decode("utf-8")
xpath = etree.HTML(pageContent)
# 完整xpath: /html/body/div[2]/div[1]/div[6]/div[1]/p[2]/text()
content = xpath.xpath('//*[@id="shangxiquan1274"]/div[1]/p[2]/text()')
print("浏览器复制xpath获取内容:",content)

代码运行后发现输出空列表没有任何内容.
然后我把获取到的页面内容写入到了一个文件中,用浏览器重新打开这个文件.
在这里插入图片描述
页面显示虽然有问题,但是"赏析"这一段的文本内容还是在的,说明页面是存在这个数据的.并且不是通过接口获取的.

然后我重新在这里复制了xpath地址,粘贴到了代码中,发现和之前在原网站复制到的xpath地址居然不同

重新运行代码,成功获取到了内容

from lxml import etree
from requests import Session

url = 'https://so.gushiwen.cn/shiwenv_4ef2774ed20a.aspx'
session = Session()
# 从原网站F12控制台复制的xpath地址片段
pageContent = session.get(url).content.decode("utf-8")
xpath = etree.HTML(pageContent)
# 完整xpath: /html/body/div[2]/div[1]/div[6]/div[1]/p[2]/text()
content = xpath.xpath('//*[@id="shangxiquan1274"]/div[1]/p[2]/text()')
print("浏览器复制xpath获取内容:",content)

# 写入文件
with open("test.html",mode="w",encoding="utf-8") as w:
    w.write(pageContent)

# 从本地文件打开的页面复制的xpath地址代片段
xpath = etree.HTML(pageContent)
# 完整xpath: /html/body/div[2]/div[1]/div[5]/div/p[2]/text()
content = xpath.xpath('//*[@id="shangxi1274"]/div/p[2]/text()')
print("修正后的xpath获取内容:",content)

运行结果

在这里插入图片描述
两次xpath地址对比:

# 存在问题的
完整路径:/html/body/div[2]/div[1]/div[6]/div[1]/p[2]/text()
# 本地复制的可用的xpath地址
完整路径:/html/body/div[2]/div[1]/div[5]/div/p[2]/text()

# 相对路径
# 存在问题的
//*[@id="shangxiquan1274"]/div[1]/p[2]/text()
# 本地复制的可用的xpath地址
//*[@id="shangxi1274"]/div/p[2]/text()

解决方案

虽然不知道原因,但是如果发现获取不到内容大部分原因都是xpath地址问题了,如果检查没有问题可以先把抓取到的页面保存到本地,然后用浏览器打开本地文件重新复制xpath地址.

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值