如何在此html片段中获取a的href值?
我需要根据i标签中的那个类来获取它
<!--
<a href="https://link.com" target="_blank"><i class="foobar"></i> </a>
-->
我试过了,但没有结果
foo_links = tree.xpath('//a[i/@class="foobar"]')
答案 0 :(得分:1)
您的代码对我有用 - 它会返回<a>
的列表。如果您希望href
的列表不是元素本身,请添加/@href
:
hrefs = tree.xpath('//a[i/@class="foobar"]/@href')
您还可以先找到<i>
,然后使用/parent::*
(或简称/..
)返回<a>
。
hrefs = tree.xpath('//a/i[@class="foobar"]/../@href')
# ^ ^ ^
# | | obtain the 'href'
# | |
# | get the parent of the <i>
# |
# find all <i class="foobar"> contained in an <a>.
如果所有这些都不起作用,您可能需要验证文档的结构是否正确。
请注意,XPath不会查看注释<!-- -->
。如果<a>
确实位于评论<!-- -->
中,则需要先手动提取文档。
hrefs = [href for comment in tree.xpath('//comment()')
# find all comments
for href in lxml.html.fromstring(comment.text)
# parse content of comment as a new HTML file
.xpath('//a[i/@class="foobar"]/@href')
# read those hrefs.
]
答案 1 :(得分:0)
您应该注意目标元素是HTML
评论。您不能简单地使用<a>
与<{1}}从评论获取XPath
,因为在这种情况下,它不是节点,而是简单的字符串。
尝试以下代码:
"//a"
P.S。您可能需要使用更复杂的正则表达式来匹配链接import re
foo_links = tree.xpath('//comment()') # get list of all comments on page
for link in foo_links:
if '<i class="foobar">' in link.text:
href = re.search('\w+://\w+.\w+', link.text).group(0) # get href value from required comment
break