【发布时间】:2015-02-14 17:37:41
【问题描述】:
首先,这样的事情有可能吗?
我一直在尝试通过使用网页中存在的“子元素文本值”来生成 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 数据(在我的示例变量tree 或data)来访问子元素。 或者更重要的是,如果可能的话,子元素的文本值。
假设在上面的示例网页中,我想搜索表“Supplies and Expenses”并通过该值动态生成Xpath表达式 - Supplies and Expenses
有没有办法这样做!!!最终目标,我想实现的是读取网页并为网页中存在的子元素文本值生成Xpath。
【问题讨论】:
-
您想为具有特定文本的元素生成 xpath?或者你想要一个像
/html/body/div[6]/table/tbody/tr[1]/td/div/b给定元素的“通用” xpath(可能在其他页面中有一些不同的文本) -
我想为具有特定文本的元素生成 xpath。如果我理解正确,则无需担心其他页面。
-
下面的答案正是您想要的,xpath 指向具有特定文本的元素。如果您想要像
/html/...这样的xpath,请首先找到元素(可能在下面的答案中使用xpath 或遍历树。第二次自己追溯回根。
标签: python html xpath lxml elementtree