我正在编写代码以刮取github。我从视图源页面中提取了下面的dom树。
<tr>
<td class="blob-num blob-num-addition empty-cell"></td>
<td id="diff-e07a5ab360bd8cfa1490cbe9056ade49R298" data-line-number="298"
class="blob-num blob-num-addition js-linkable-line-number"></td>
<td class="blob-code blob-code-addition">
<span class="blob-code-inner">+ <span class="pl-k">@PostAuthorize</span>(<span class="pl-s"><span class="pl-pds">"</span>this.belongsToTenant(returnObject) && (hasAnyRole('ROLE_ADMIN_INVOICE','ROLE_RUN_AS_ADMIN_INVOICE') or this.belongsToUser(returnObject, authentication.name))<span class="pl-pds">"</span></span>)</span>
</td>
</tr>
我可以使用下面的xpath查询获取包含“PostAuthorize”的节点。
//span[contains(.,'PostAuthorize')]
我想到达包含单词“data-line-number”的节点,以便我可以从该属性中提取行号值。此外,我想从当前节点遍历父节点。我该怎么做?一种方法可以是获取父节点,然后遍历所有子节点以查找所需的子元素。但是我如何在xpath中执行此操作?
答案 0 :(得分:0)
有两种常用技术,Xpath和CSS选择器,但在这种情况下,您只能使用Xpath,因为CSS选择器不支持向后导航。
在你的情况下,你需要寻找&#34; PostAuthorize&#34;的父母,这是&#34; blob-code blob-code-addition&#34;,然后寻找&# 34; blob-code blob-code-addition&#34;的父级,这是一个tr元素,从那里你可以通过使用Xpath或CSS选择器自由找到你想要的元素,如果你想提取它的属性值,在python中,我使用&#34; element.get_attribute()&#34;方法,我相信在Java中,有一个等价物。
有关更多信息,请参阅此文档。这真的很全面。 http://scraping.pro/res/xpath-cheat/xpath_css_dom_recipes.pdf
寻找这个词:&#34;元素的父母&#34;。
希望它有所帮助。