如何获取id等于`constant_text-something_changed`的所有html元素?

时间:2014-05-26 12:51:11

标签: python html parsing python-2.7 lxml

我正在尝试使用lxml解析html,如下所示:

<tr id="element-36a07b7" class=" " ... data-date="2014-05-25">
    <td>2014-05-25</td>
    <td>Wikipedia (<a href="http://example.com/36a07b7" title="Wikipedia search">link</a>)</td>
    <td>Yandex (<a href="http://ya.ru/36a07b7" title="Yandex search">link</a>)</td>
    <td title="what I am looking for">another needed info<span class="small">(<a href="http://example.com">info 3</a>)</span>
    </td>
    <td class="result">1</td>
    <td class="result">2</td>
    <td class="result">3</td>
    ...
</tr>

并希望获取ID等于element-...的所有元素并提取36a07b7data-datewhat I am looking foranother needed infoinfo 3从那里。

首先,我想要获得所有element- s:

elements = t.find('//*[@id="flight-"]')

如何在id名称中使用通配符?试图使用*.*,但它不起作用。

1 个答案:

答案 0 :(得分:1)

使用starts-with功能:

import lxml.html

root = lxml.html.fromstring('''
<table>
<tr id="element-36a07b7" class=" "  data-date="2014-05-25">
    <td>2014-05-25</td>
    <td>Wikipedia (<a href="http://example.com/36a07b7" title="Wikipedia search">link</a>)</td>
    <td>Yandex (<a href="http://ya.ru/36a07b7" title="Yandex search">link</a>)</td>
    <td title="what I am looking for">another needed info<span class="small">(<a href="http://example.com">info 3</a>)</span>
    </td>
    <td class="result">1</td>
    <td class="result">2</td>
    <td class="result">3</td>
    ...
</tr>
</table>
''')

tr_list = root.xpath('//*[starts-with(@id, "element-")]')
for tr in tr_list:
    print tr.get('id').split('-')[1]
    print tr.get('data-date')

输出:

36a07b7
2014-05-25

或者,您可以使用cssselect方法使用css选择器:

tr_list = root.cssselect('[id^=element-]')