python-2.7 - Xpath - 当条件包含标签时检索文本值
问题描述
我有一个表的一部分,我正在尝试获取值“Distributor 10”
<table class="d">
<tr>
<td class="ah">supplier<td>
<td class="ad">
<a href="/S/3/143.html">Supplier 10</a>
</td>
</tr>
<tr>
<td class="ah">distributor<pre><td>
<td class="ad">
<a href="/D/3/143.html">Distributor 10</a>
</td>
</tr>
</table>
如果我在 Chrome 开发人员中,我会使用以下 xpath 字符串获取此值
//tr/td[text()="distributor]/following-sibling::td[@class="ad"]/a/text()
但是当我在 python 中编写代码时 - 它返回一个空列表......从我可以看到它是因为<pre>
“分销商”旁边的标签当我修改上面提到的 xpath 以寻找“供应商”而不是分销商它工作非常好
欢迎大家提出意见
解决方案
假设您使用的是 lxml,您可以使用以下 XPath 之一来使其正常工作:
//tr[contains(.,"distributor")]//a/text()
//a[parent::td[@class="ad"] and starts-with(@href,"/D")]/text()
一段代码:
from lxml import etree
from io import StringIO
html = '''<table class="d">
<tr>
<td class="ah">supplier<td>
<td class="ad">
<a href="/S/3/143.html">Supplier 10</a>
</td>
</tr>
<tr>
<td class="ah">distributor<pre><td>
<td class="ad">
<a href="/D/3/143.html">Distributor 10</a>
</td>
</tr>
</table>'''
parser = etree.HTMLParser()
tree = etree.parse(StringIO(html), parser)
data = tree.xpath('//tr[contains(.,"distributor")]//a/text()')
print (data)
输出 :['Distributor 10']
替代方法:使用 lxml html 清洁器类(“remove_tags”)从页面中删除 pre 元素。
参考 :
推荐阅读
- c# - 如何在 c# 中使用 System.IO 从 ZIP 存档中提取文件而不使用该文件夹
- javascript - 我如何制作一个使用 Svelte 双击 contentEditable?
- google-cloud-platform - 谷歌云:有并发的政策变化。请使用指数退避重试整个读取-修改-写入
- c# - MS Test V2 - 失败时的 ClassInitialize 行为
- python - 如何在 Pandas 中作为 SQL 进行内部连接,陷入以下问题
- angular - 使用 PrimeNG 冷冻色谱柱 - 未对齐
- sql - 在 2 个日期之间填充一定数量的行
- python - 使用 PCA 减少 Python SIFT 描述符
- flutter - 如何为 Codemagic 设置自动构建?
- yii - YII 表单生成器渲染视图不起作用