这是示例HTML。
<html>
<a href="HarryPotter:Chamber of Secrets">
text
</a>
<a href="HarryPotter:Prisoners in Azkabahn">
text
</a>
</html>
我处于需要提取
的情况Chamber of Secrets
Prisoners in Azkabahn
我在使用xpathb1.0的python中使用lxml 4.2.1。 我尝试使用XPath提取
'substring-after(//a/@href,"HarryPotter:")'
仅返回"Chamber of Secrets"
。
以及XPath
'//a/@href[substring-after(.,"HarryPotter:")]'
返回
'HarryPotter:Chamber of Secrets'
'HarryPotter:Prisoners in Azkabahn'
我已经对其进行了研究并获得了新的学习,但没有找到解决问题的方法。
我使用substring-after
命中并尝试了不同的XPath。
在我的研究中,我知道正则表达式也可以实现它,然后我尝试并失败了。
我发现使用regex在XPath 2.0及更高版本中操作字符串很容易,但是我们也可以在XPath 1.0中使用XSLT扩展名使用regex。
我们可以使用substring-after
函数来完成此操作吗?如果是,那么XPath是什么?如果否,那么什么是获得所需输出的最佳方法?
以及如何通过坚持使用lxml在XPath中使用正则表达式来获得所需的输出。
答案 0 :(得分:1)
尝试使用这种方法来获取两个文本值:
camelCase
答案 1 :(得分:0)
如果您想同时使用substring-after()
和substring-before()
这里是示例:
从lxml导入html
f_html = """<html><body><table><tbody><tr><td class="df9" width="20%">
<a class="nodec1" href="javascript:reqDl(1254);" onmouseout="status='';" onmouseover="return dspSt();">
<u>
2014-2
</u>
</a>
</td></tr></tbody></table></body></html>"""
tree_html = html.fromstring(f_html)
deal_id = tree_html.xpath("//td/a/@href")
print(tree_html.xpath('substring-after(//td/a/@href, "javascript:reqDl(")'))
print(tree_html.xpath('substring-before(//td/a/@href, ")")'))
print(tree_html.xpath('substring-after(substring-before(//td/a/@href, ")"), "javascript:reqDl(")'))
结果:
1254);
javascript:reqDl(1254
1254