首先,是否可以这样做呢?
我一直在尝试使用网页中的“子元素文本值”来生成Xpath表达式。尝试使用lxml (etree、html、getpath)和Python中的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文档,他们正在手动创建元素树,但是如何使用读取和解析的html数据(在我的示例变量tree或data中)来访问子元素。或者更重要的是,如果可能的话,子元素文本值.
假设在上面的示例网页中,我希望搜索表“用品和费用”,并通过值--供应和费用动态生成Xpath表达式。
有没有其他选择!最终目标是,我想要实现的是读取网页并生成子元素文本值的网页。
发布于 2014-12-16 12:04:41
要根据其文本值的一部分查找所有元素:
"//*[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')]"例如,您也可以找到包含单词“the”的所有sub 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)https://stackoverflow.com/questions/27504128
复制相似问题