Python 基于中带有span标记的td查找下一个td

Python 基于中带有span标记的td查找下一个td,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,如何找到具有跨距的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="

如何找到具有跨距的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>
"""
但是,在第二个tr中,我需要在td之后找到td,使用
非正常字符串
,上述方法将不起作用。那么,如何处理包含跨距的td

第一个想法是通过正则表达式找到它并编译
a_nonnormal_string=str(soup.find(“td”),text=re.compile(r'a non-normal string')).find_next('td'))
,但这也不适用


这只是两个TR的一个例子,但实际上该网站有数百个TR

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

印刷品:

10
2 000
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