如何获取所有id为`constant_text-something_changed`的HTML元素?

0 投票
1 回答
2010 浏览
提问于 2025-04-18 07:36

我正在尝试用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-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-]')

撰写回答