我有这个 HTML 片段
<div id="dw__toc">
<h3 class="toggle">Table of Contents</h3>
<div>
<ul class="toc">
<li class="level1"><div class="li"><a href="#section">#</a></div>
<ul class="toc">
<li class="level2"><div class="li"><a href="#link1">One</a></div></li>
<li class="level2"><div class="li"><a href="#link2">Two</a></div></li>
<li class="level2"><div class="li"><a href="#link3">Three</a></div></li>
现在我想用 lxml.html 解析它。最后我想要一个可以提供搜索词(即“one”)的函数,并且该函数应该返回
One
#link1
现在我正在尝试获取 XPath 中的变量。
Works:
import lxml.html
html = lxml.html.parse("www.myurl.com/slash/something")
test=html.xpath("//ul[@class='toc']/li[@class='level2']/div[@class='li']/a/text()='One'")
print test
尝试使用变量。我想替换硬编码'One'
带有一个变量,我可以稍后返回该函数。
不起作用:
import lxml.html
html = lxml.html.parse("www.myurl.com/slash/something")
desiredvars = ['One']
myresultset=((var, html.xpath("//ul[@class='toc']/li[@class='level2']/div[@class='li']/a[text()='%s']"%(var))[0]) for var in desiredvars)
for each in myresultset:
print each
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <genexpr>
IndexError: list index out of range
这是基于这个答案:https://stackoverflow.com/a/10688235/2320453知道为什么它不起作用吗?这是做这样的事情的“正确方法”吗?
EDIT:总结一下:
我想在 a-标签内搜索并从此属性中获取文本,但我不需要完整的列表,而是希望能够使用变量进行搜索。
伪代码:
import lxml.html
html = lxml.html.parse("www.myurl.com/slash/something")
searchterm = 'one'
test=html.xpath("...a/text()=searchterm")
print test
预期结果
One
#link1