lxml中的xpath根据href查找id号
xpath in lxml to find id number based on href
我正在尝试重写某人的库以解析一些 xml 随请求返回的内容。但是他们以我不习惯的方式使用 lxml 。我相信它使用正则表达式来查找数据,虽然提供的大多数库都可以工作,但当正在解析的站点在列表结构中具有文件 ID 时它不起作用。 Essnetially 我得到了一个页面,我正在寻找一个与 href 运动员号码相匹配的 id。所以说我只想获取运动员 567377 的 ID。
</div>
</a></div>
<ul class='list-entries'>
<li class='entity-details feed-entry' id='Activity-123120999590'>
<div class='avatar avatar-athlete avatar-default'>
<a class='avatar-content' href='/athletes/567377' >
</a>
</div>
</li>
<li class='entity-details feed-entry' id='Activity-16784940202'>
<div class='avatar avatar-athlete avatar-default'>
<a class='avatar-content' href='/athletes/5252525'>
</a>
</div>
代码:
lst_group_activity = parser.xpath(".//li[substring(@id, 1, 8)='Activity']")
完美地提供所有列表项,但适用于所有活动。我只想拥有与合适的运动员相关的那个。该库使用以下内容来使用@href select 正确的运动员。
lst_athlethe_act_in_group_activity = parser.xpath(".//li[substring(@id, 1, 8)='Activity']/*[@href='/athletes/"+athlethe_id+"']/..")
然而,这似乎永远行不通。它找到 activity 但随后将它们全部扔掉。
有没有更好的方法让它工作?任何可以为我指出与下一个元素关联的正确方向的教程。
具有 href
属性的元素不是您的 li
元素的直接子元素,因此您的 xpath 失败了。您正在匹配:
.//li/*[@href="..."]
你想要:
.//li/div/a[@href="..."]
(如果您认为另一个元素可能包含 href
属性,您可以匹配 *
而不是 a
,如果您认为a
元素的路径可能并不总是 li/div/a
).
所以要找到 li
元素:
parser.xpath(".//li[substring(@id, 1, 8)='Activity']/div/a[@href='/athletes/%s']/../.." % '5252525')
但你也可以不带 ../..
:
parser.xpath(".//li[substring(@id, 1, 8)='Activity' and div/a/@href='/athletes/%s']" % '5252525')
我正在尝试重写某人的库以解析一些 xml 随请求返回的内容。但是他们以我不习惯的方式使用 lxml 。我相信它使用正则表达式来查找数据,虽然提供的大多数库都可以工作,但当正在解析的站点在列表结构中具有文件 ID 时它不起作用。 Essnetially 我得到了一个页面,我正在寻找一个与 href 运动员号码相匹配的 id。所以说我只想获取运动员 567377 的 ID。
</div>
</a></div>
<ul class='list-entries'>
<li class='entity-details feed-entry' id='Activity-123120999590'>
<div class='avatar avatar-athlete avatar-default'>
<a class='avatar-content' href='/athletes/567377' >
</a>
</div>
</li>
<li class='entity-details feed-entry' id='Activity-16784940202'>
<div class='avatar avatar-athlete avatar-default'>
<a class='avatar-content' href='/athletes/5252525'>
</a>
</div>
代码:
lst_group_activity = parser.xpath(".//li[substring(@id, 1, 8)='Activity']")
完美地提供所有列表项,但适用于所有活动。我只想拥有与合适的运动员相关的那个。该库使用以下内容来使用@href select 正确的运动员。
lst_athlethe_act_in_group_activity = parser.xpath(".//li[substring(@id, 1, 8)='Activity']/*[@href='/athletes/"+athlethe_id+"']/..")
然而,这似乎永远行不通。它找到 activity 但随后将它们全部扔掉。
有没有更好的方法让它工作?任何可以为我指出与下一个元素关联的正确方向的教程。
具有 href
属性的元素不是您的 li
元素的直接子元素,因此您的 xpath 失败了。您正在匹配:
.//li/*[@href="..."]
你想要:
.//li/div/a[@href="..."]
(如果您认为另一个元素可能包含 href
属性,您可以匹配 *
而不是 a
,如果您认为a
元素的路径可能并不总是 li/div/a
).
所以要找到 li
元素:
parser.xpath(".//li[substring(@id, 1, 8)='Activity']/div/a[@href='/athletes/%s']/../.." % '5252525')
但你也可以不带 ../..
:
parser.xpath(".//li[substring(@id, 1, 8)='Activity' and div/a/@href='/athletes/%s']" % '5252525')