如何获取所有id为`constant_text-something_changed`的HTML元素?
我正在尝试用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-...
的元素,并从中提取36a07b7
、data-date
、我想要的内容
、另一个需要的信息
和信息3
。
首先,我想获取所有的element-
:
elements = t.find('//*[@id="flight-"]')
我该如何在id名称中使用通配符呢?我尝试过用*
和.*
,但都不行。
1 个回答
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
另外,你也可以使用 CSS 选择器,通过 cssselect
方法来实现:
tr_list = root.cssselect('[id^=element-]')