Beautifulsoup Table 抓取 table 导航

Beautifulsoup Table Scraping table navigation

我正在努力学习beautifulsoup报废HTML,有难度的挑战。 HTML 我试图报废格式不正确并且缺乏知识 beautifulsoup 我有点卡住了..

我要废弃的HTML如下

<table>
 <tr>
    <td><b>Value 1<b/>HiddenValue1</td>
    <td>Value 2</td>
 </tr>
 <tr>
    <td>NoValue</td>
 </tr>
 <tr>
    <td><b>Value 3<b/>HiddenValue2</td>
    <td>Value 4</td>        
 </tr>     
</table>

所以我想要得到的结果是提取所有带有两个 td 标签的行。 这将提取第一个和最后一个 tr。 一旦我得到它们,我需要排列这些 td 和 b,然后将文本输入字典。

我想要的结果是字典列表

[ 
  { tdb : 'Value 1', tdHidden : 'HiddenValue1', tdSecond : 'Value 2' },
  { tdb : 'Value 3', tdHidden : 'HiddenValue2', tdSecond : 'Value 4' },
]

我正在尝试使用 findall() 函数,但不知道如何检查子 td 标签的长度,也不知道如何导航到第一个 td 和第二个 td ..

在此先感谢您的帮助!

编辑:

能否请您也帮助解决如何在 td 标签中获取 "GetThisValue" 和 "Current" 的问题?

<td align="left" valign="top">
   <b>Value1</b>
   <br>
   <font>
     <b>Current</b>
   </font>
   <br>
   GetThisValue
</td>

以下代码应该有效 -

trs = soup.find('table').find_all('tr')
trs = [tr for tr in trs if len(tr.find_all('td')) == 2]
results = []
for tr in trs:
    tds = tr.find_all('td')
    d = {
        'tdb': tds[0].b.text,
        'tdHidden': tds[0].b.next_sibling,
        'tdSecond': tds[1].text
    }
    results.append(d)

编辑部分的答案 2 -

# GetThisValue
soup.find('td').find_all('br')[1].next_sibling

# Current
soup.find('td').find('font').b.text