Python中XPath相关问题求解答,谢谢大佬们!

零基础学<font class="skcolor_ljg">Python</font>(全彩版) 怎么吧这个标签里的汉字用 xpath 全部提取出来。 谢谢大佬们。


Python中XPath相关问题求解答,谢谢大佬们!
16 回复

<em>零基础学<font class=“skcolor_ljg”>Python</font>(全彩版)</em>
没写全。。


帖子标题有点宽泛,没具体说遇到啥XPath问题。
是解析网页时路径写不对,还是用lxml库提取不到数据?

如果是路径问题,记得检查标签和属性是否匹配,浏览器的“检查”里可以直接复制XPath,但有时动态内容需要调整。
lxml的话,代码通常长这样:

from lxml import etree

html = """
<html>
  <body>
    <div id="content">目标文本</div>
  </body>
</html>
"""

tree = etree.HTML(html)
result = tree.xpath('//div[@id="content"]/text()')
print(result[0] if result else '没找到')

如果问题更具体,比如命名空间、相对路径或跨级查找,把错误代码和网页片段贴出来才好针对性解决。

一句话建议:贴出你的代码和想提取的网页结构,问题更容易定位。

em//text()
这样行嘛?

chrome 控制台右键 copy wiht xpath 这个没给文档结构写了哪里准哦

normalize-space(.//em)

function getElementByXpath(path) {
return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}

var text = getElementByXpath("//font[@class=‘skcolor_ljg’]/text()")

不行的呀,这样提取不出来 python。

用个正则表达式得了

from lxml import etree

html = '<em>零基础学<font class=“skcolor_ljg”>Python</font>(全彩版)</em>'

print(etree.HTML(html).xpath(‘string(//em)’))
零基础学 Python (全彩版)

用正则,这样就得到两个问题啦🤣

是的 我决定用正则了。

是的,我决定用正则了。

其实昨天试了一下用 xpath (“string(//font[@class=‘skcolor_ljg’])”)可以提取出来。

//em/text()[2]

修正楼上。把[2]去掉。

>>> from lxml import etree
>>> html = ‘<em>零基础学<font class=“skcolor_ljg”>Python</font>(全彩版)</em>’
>>> doc = etree.fromstring(html)
>>> doc.xpath(’//em//text()’)
[‘零基础学’, ‘Python’, ‘(全彩版)’]

回到顶部