我可以在html文档中识别出一些文字,这些文字位于我正在寻找的表格之前。然而,我正在努力从包含文本的元素转到我想要找到的表格。
我有一个包含一些文字的文件。通过查找字体标记内的一些单词来识别此文本。文本后面有表格 - 结构可能看起来像
my_string = """<html>
<div><p>maybe some words</p>
<div></div>
<div><font>PICKLES are selling well</font></div>
<div><p>maybe some words</p><table><tr><td>123</td></tr></table></div>
<html>"""
我正在将该表显示为以下div的子项,但我想要一般情况,表格可能是div或ap的子项,这是一些未知元素,位于树中我的字体所在的位置。< / p>
我已经能够获得我的字体,然后使用以下表达式返回其父级
首先是
test_tree = html.fromstring(my_string)
所以找到魔法元素
for e in test_tree.xpath(('//font[contains(text(),"PICKLES")]'):
magic_element = e
现在我已经找到了这个元素,以便我知道树中的下一个表格将是我需要的表格,我已成功回到主要的&#39; trunk&#39;现在从那里我想找到下一张桌子
parent = magic_element.xpath('parent::*')[0]
当我看到父母时,它是我下一步的正确元素
>>> parent
<Element div at 0x2f8a6d8>
现在我拥有了我的font元素的父级,我想从那个位置沿着树下去找到下一个表格。我假设我可以使用以下代码开始讨论
sibling = parent.xpath('following-sibling::')
然而,这给了我一条错误信息。
因此,如何从名为 parent 的元素继续检查我的文档,因为我需要找到父文件,然后继续下一步找到我要提取的内容。
请注意,我的文档比上面的内容更复杂。在这个例子中找到唯一的表是很简单的 - 通常在我要查找的元素之前文档中还有其他表(数十个),并且可能有几十个跟随我想要的特定表。
答案 0 :(得分:2)
对于您的HTML,调整为格式良好的XML,并进行格式化以便于阅读:
<html>
<div>
<p>maybe some words</p>
</div>
<div/>
<div>
<font>PICKLES are selling well</font>
</div>
<div>
<p>maybe some words</p>
<table>
<tr>
<td>123</td>
</tr>
</table>
</div>
</html>
这个XPath表达式,
//font[contains(text(),"PICKLES")]/following::table[1]
将选择文档中第一个table
元素,该元素位于其字符串值为给定文本的font
元素之后。
将此问题与问题联系起来,并从评论中提出答案
for e in test_tree.xpath(('//font[contains(text(),"PICKLES")]'):
e_text = e.text_content() #to illustrate that I can do something with this element
my_table = e.xpath('./following::table[1]')[0] #while only one table is found a list is returned with the table as the only element of the list