我正在尝试使用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
,what I am looking for
,another needed info
和info 3
从那里。
首先,我想要获得所有element-
s:
elements = t.find('//*[@id="flight-"]')
如何在id名称中使用通配符?试图使用*
,.*
,但它不起作用。
答案 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-]')