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

从指定HTML页面提取文本失败,XPath返回空数组求解决

问题分析与解决

核心错误点

  • 你直接把response.content转成字符串传入StringIO,这会把字节流的repr形式(比如b'xxx')当成HTML内容解析,导致etree无法识别正常的<body>、<pre>结构,xpath自然找不到内容。
  • 其实pastebin的raw页面本身就是纯文本输出,完全没必要用xpath解析HTML,属于多此一举。

正确的实现方式

方式1:直接获取纯文本(最简便)

raw页面返回的就是纯文本,直接取response.text即可:

import requests

response = requests.get("https://pastebin.com/raw/HtqbjSdE")
# requests会自动识别编码,也可手动指定确保正确性
response.encoding = 'utf-8'
paste_content = response.text
print(paste_content)

方式2:如果非要用xpath解析(仅作演示)

如果坚持用lxml解析,需要传入正确的文本内容,而不是字节的字符串形式:

import requests
from lxml import etree
from io import StringIO

response = requests.get("https://pastebin.com/raw/HtqbjSdE")
# 用response.text作为HTML内容,而非str(response.content)
tree = etree.parse(StringIO(response.text), etree.HTMLParser())
content_path = "//body/pre/text()"
paste_content = tree.xpath(content_path)
# xpath返回列表,需拼接成完整字符串
print(''.join(paste_content))

为什么之前的xpath返回空数组?

当你执行str(response.content)时,得到的是类似b'<!DOCTYPE html>\n<html>...'的字符串,etree解析这个内容时,会把b'当成文本内容的一部分,整个结构完全不是正常的HTML,所以//body//pre/text()根本匹配不到任何元素,自然返回空数组。

内容的提问来源于stack exchange,提问作者Martin Chapman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:27:11