lxml中的xpath基于href查找id号

时间:2017-09-15 15:50:27

标签: python regex lxml

我正在尝试重写someones库来解析一些带有请求的xml。然而,他们以我不习惯的方式使用lxml。我相信它使用正则表达式来查找数据,虽然大多数库提供了工作,但当被解析的站点在列表结构中具有文件ID时,它不起作用。因此我得到了一个页面,我正在寻找一个与href运动员号码相匹配的ID。所以说我想为运动员567377获得身份证。

</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来选择合适的运动员。

    lst_athlethe_act_in_group_activity = parser.xpath(".//li[substring(@id, 1, 8)='Activity']/*[@href='/athletes/"+athlethe_id+"']/..")

然而,这似乎永远不会奏效。它找到了活动,然后将它们扔掉了。

有没有更好的方法让这个工作?任何教程都可以指出我正确的方向与下一个元素相关联。

1 个答案:

答案 0 :(得分:0)

具有href属性的元素不是li元素的immedite子元素,因此您的xpath失败。你匹配:

.//li/*[@href="..."]

你想:

.//li/div/a[@href="..."]

(如果您认为其他元素可能包含*属性,则可以匹配a而不是href,如果您认为路径为.//li//a[@href="..."],则可以与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')

的情况下写出来
import java.sql.* ;
String URL = "jdbc:sqlserver:thin:@amrood:1521:EMP";
String USER = "username";
String PASS = "password"
Connection conn = DriverManager.getConnection(URL, USER, PASS)
PreparedStatement pstmt = null;
String SQL = "dbo.sp_add_operator  @name = N'Dan Wilson',  
    @enabled = 1,  
    @email_address = N'danwi',  
    @pager_address = N'5551290AW@pager.Adventure-Works.com',  
    @weekday_pager_start_time = 080000,  
    @weekday_pager_end_time = 170000,  
    @pager_days = 62 ; ";
pstmt = conn.prepareStatement(SQL);
stmt.executeUpdate(); or stmt.executeQuery();