Beautifulsoup表刮表导航

时间:2015-06-11 12:11:54

标签: beautifulsoup

我正在尝试学习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 ..

提前感谢您的帮助!

编辑:

请您帮忙解决如何获取&#34; GetThisValue&#34;和&#34;当前&#34;在td标签中?

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

2 个答案:

答案 0 :(得分:1)

以下代码应该有效 -

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)

答案 1 :(得分:0)

编辑部分的答案2 -

MyConstants.get("CONST_NAME");