假设我们从浏览器收到以下响应:
<div>
<tr id="1"></tr>
<tr id="2">
<!--
<div class="A">AAA</div>
<div class="C">BBB</div>
<div class="C">CCC</div>
-->
</tr>
</div>
在scrapy中使用xpath获取评论字符串应该是这样的:
response.xpath(//tr[@id="2"]/comment())
所以我的问题 - 有没有简单的方法来提取 <div class="C"
的值> 评论中的标签?
一种方法是删除字符串 <!-- (...) -->
中的注释标签。 ,并使用lxml.html
库再次将结果转换为 HTML 并在其中使用 xpath,但我很确定这应该是一种更简单的方法...
如果有任何帮助,我将不胜感激。干杯!
最佳答案
在我看来,用lxml.html
解析评论内容是一个很好的解决方案。
Python代码
from lxml import etree
from io import StringIO
parser = etree.HTMLParser()
html_text = """<div>
<tr id="1"></tr>
<tr id="2">
<!--
<div class="A">AAA</div>
<div class="C">BBB</div>
<div class="C">CCC</div>
-->
</tr>
</div>"""
tree = etree.parse(StringIO(html_text), parser)
comment = tree.xpath("//tr[@id='2']/comment()")
comment_text = str(comment[0])
# string needs an outermost element in order to be parseable
comment_text = comment_text.replace("<!--", "<html>").replace("-->", "</html>")
embedded_tree = etree.parse(StringIO(comment_text), parser)
embedded_tree.xpath("//div[@class='C']/text()")
输出
['BBB', 'CCC']
关于python - 在字符串中使用 XPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59973906/