gpt4 book ai didi

python - 根据带有 span 标签的 td 查找下一个 td

转载 作者:太空宇宙 更新时间:2023-11-04 05:20:49 24 4
gpt4 key购买 nike

如何找到带有跨度的 td 的下一个 td?

html_text = """
<tr class="someClass">
<td>&nbsp;</td>
<td>A normal string</td>
<td class="someClass">10</td>
<td class="someClass">11</td>
<td class="someClass">12</td>
<td>&nbsp;</td>
</tr>
<tr class="someClass">
<td>&nbsp;</td>
<td>Non normal string <span style="font-size:10px">(with span)</span></td>
<td class="someClass">2 000</td>
<td class="someClass">2 100</td>
<td class="someClass">2 150</td>
<td>&nbsp;</td>
</tr>
"""

要在 td 之后获取带有“普通字符串”的 td,我只需通过以下方式找到它:

a_normal_string = str(soup.find("td", text="A normal string").find_next('td'))
a_normal_string = re.findall(r'\d+', a_normal_string)
print a_normal_string #['10']

但是,在第二个 tr 中,我需要在带有 Non normal string 的 td 之后找到 td上面的方法是行不通的。那么如何处理包含 span 的 td 呢?

首先想到的是通过正则表达式找到它并编译a_nonnormal_string = str(soup.find("td", text=re.compile(r'A non normal string')).find_next('td'))但这也不适用。

这只是两个 trs 的示例,但实际网站有数百个 trs。

最佳答案

一个选择是用 searching function 来解决它,使用 get_text() 根据所需字符串检查文本(注意 get_text() 返回元素的完整文本,包括其子元素,但 .string does not -如果有子元素,它将是 None - 这实际上是您的第二种方法不起作用的原因):

tds = soup.find_all(lambda tag: tag.name == "td" and "normal string" in tag.get_text())
for td in tds:
a_normal_string = td.find_next('td').get_text()
print(a_normal_string)

打印:

10
2 000

关于python - 根据带有 span 标签的 td 查找下一个 td,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40427063/

24 4 0