使用XPath从表中最左边的列获取href

时间:2016-09-06 00:47:17

标签: python html xml xpath lxml

我尝试从此处的表格中提取href文字:https://en.wikipedia.org/wiki/List_of_first-person_shooters

这是表格的顶部:

<table class="wikitable sortable" style="font-size: 85%; text-align: left;">
<tr style="background: #ececec">
<th>Title</th>
<th>Developer</th>
<th>Platform(s)</th>
<th>Release Date</th>
</tr>
<tr>
<th><i><a href="/wiki/007_Legends" title="007 Legends">007 Legends</a></i></th>
<td><a href="/wiki/Eurocom" title="Eurocom">Eurocom</a>, <a href="/wiki/Activision" title="Activision">Activision</a></td>
<td>PS3, X360, Wii U, WIN</td>
<td>2012-10-16</td>
</tr>
<tr>
<th><i><a href="/wiki/007:_Quantum_of_Solace" title="007: Quantum of Solace">007: Quantum of Solace</a></i></th>
<td><a href="/wiki/Treyarch" title="Treyarch">Treyarch</a>, <a href="/wiki/Beenox" title="Beenox">Beenox</a></td>
<td>DS, PS3, Wii, WIN, X360</td>
<td>2008-10-31</td>
</tr>
<tr>
<th><i><a href="/wiki/3D_Monster_Chase" title="3D Monster Chase">3D Monster Chase</a></i></th>
<td><a href="/w/index.php?title=Romik&amp;action=edit&amp;redlink=1" class="new" title="Romik (page does not exist)">Romik</a></td>
<td>AMSCPC, ZX</td>
<td>1985</td>
</tr>

以下XPath查询从表中获取href文本,但我只想要每行的第一列。 XPath是否可行,最好没有计数器?我正在使用Python库lxml

tree.xpath('//table[@class="wikitable sortable"]//a/@href')

检索:

['/wiki/007_Legends', '/wiki/Eurocom', '/wiki/Activision', '/wiki/007:_Quantum_of_Solace', '/wiki/Treyarch', '/wiki/Beenox', '/wiki/3D_Monster_Chase', '/w/index.php?title=Romik&action=edit&redlink=1', '/wiki/Ace_of_Spades_(video_game)', '/w/index.php?title=Ben_Aksoy&action=edit&redlink=1', '/wiki/Alcatraz:_Prison_Escape', '/wiki/Zombie_Studios', '/wiki/CodeRED:_Alien_Arena', '/w/index.php?title=COR_Entertainment&action=edit&redlink=1', '/wiki/FreeBSD', '/wiki/Alien_Breed_3D', '/wiki/Team17', '/wiki/Alien_Breed_3D_II:_The_Killing_Grounds', '/wiki/Team17', 

但是,我只希望每一行中的第一项

2 个答案:

答案 0 :(得分:1)

  

我只想要每行的第一列

这个XPath,

 //table[@class="wikitable sortable"]//tr/*[1]//a/@href

将仅选择每个a/@href的第一列中找到的tr

/wiki/007_Legends
/wiki/007:_Quantum_of_Solace
/wiki/3D_Monster_Chase

无论第一列是td还是th

如果您只对td条目感兴趣,那么您可以将*替换为td

//table[@class="wikitable sortable"]//tr/td[1]//a/@href

然后您将使用以下值选择a/@href属性:

/wiki/Eurocom
/wiki/Activision
/wiki/Treyarch
/wiki/Beenox
/w/index.php?title=Romik&action=edit&redlink=1

答案 1 :(得分:-1)

只有第一列使用<th><i>,因此请使用

tree.xpath('//table[@class="wikitable sortable"]//th//a/@href')

tree.xpath('//table[@class="wikitable sortable"]//i/a/@href')