温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - Using XPath in strings
python scrapy xpath

python - 在字符串中使用XPath

发布于 2020-03-29 13:10:54

假设我们收到来自浏览器的以下响应:

<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>

使用xpath在scrapy中获取注释字符串应该类似于:

response.xpath(//tr[@id="2"]/comment())

所以我的问题-是否有任何简单的方法可以提取<div class="C"注释>标签的值一种方法是删除字符串中的注释标签<!-- (...) -->,然后使用lxml.html库再次将结果转换为HTML并在其中使用xpath,但是我敢肯定,这应该是一种更简单的方法...

我将不胜感激。干杯!

查看更多

查看更多

提问者
willp93
被浏览
136
Mathias Müller 2020-01-30 03:35

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']