gpt4 book ai didi

python - lxml 中子元素文本值的 XPath

转载 作者:行者123 更新时间:2023-12-01 04:55:31 26 4
gpt4 key购买 nike

首先,这样的事情有可能吗?

我一直在尝试使用网页中存在的“子元素文本值”来生成 Xpath 表达式。尝试使用Python中的lxml(etree、html、getpath)、ElementTree模块来做到这一点。但我不知道如何为网页中存在的值生成 Xpath 表达式。我完全了解Python中的Scrapy框架,但这是不同的。

下面是我不完整的代码..

import urllib2, re
from lxml import etree

def wgetUrl(target):
try:
req = urllib2.Request(target)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3 Gecko/2008092417 Firefox/3.0.3')
response = urllib2.urlopen(req)
outtxt = response.read()
response.close()
except:
return ''
return outtxt


newUrl = 'http://www.iupui.edu/~webtrain/tutorials/tables.html' # homepage

dt = wgetUrl(newUrl)
parser = etree.HTMLParser()
tree = etree.fromstring(dt, parser)

根据 lxml documentation他们正在手动创建元素树,但是我如何使用读取和解析的 html 数据(在我的示例变量 treedata 中)来访问子元素。 或者更重要的是,如果可能的话,子元素文本值。

假设在上面的示例网页中,我想要搜索表“Supplies and Expenses”,并根据该值 - Supplies and Expenses 动态生成 Xpath 表达式

有什么选择可以这样做吗?我想要实现的最终目标是读取网页并为网页中存在的子元素文本值生成Xpath。

最佳答案

根据文本值的一部分查找所有元素:

"//*[contains(text(), 'some_value')]"

例如,如果您有以下内容:

<div id="somediv">
<span>Something is here</span>
<a href="#">Click here</a>
</div>

您可以像这样找到包含“here”一词的所有子元素:

"//div[@id='somediv']//*[contains(text(), 'here')]"

或者您可以例如查找包含单词“Something”的所有子 div span 元素:

"//div[@id='somediv']//span[contains(text(), 'Something')]"

至于在lxml中解析它:

from lxml import etree
outtxt = response.read()
root = etree.fromstring(outtxt)
root.xpath("my_xpath_expression")

更新:

要获取元素的完整 XPath 表达式,请使用 ElementTree.getPath() 方法,如下所示:

tree = etree.ElementTree(root)
# this will print XPath of all
# elements in 'root'
for e in root.iter():
print tree.getpath(e)

关于python - lxml 中子元素文本值的 XPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27504128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com