2015-06-11 4 views
0

Я пытаюсь узнать beautifulsoup, чтобы отказаться от HTML и выполнить сложную задачу. HTML Я пытаюсь скрапа не очень хорошо отформатирован и с отсутствием знаний с BeautifulSoup я вроде застряли ..Beautifulsoup Table Скребок таблицы навигации

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 и second td ..

Заранее за вашу помощь!

EDIT:

могли бы вы также помочь с тем, как получить «GetThisValue» и «Current» с в теге тд?

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

ли мой ответ для вас работу? –

+0

Да! Спасибо за начальную помощь ... теперь это имеет смысл. – superted

+0

Я обновил вопрос. Не могли бы вы помочь мне с частью EDIT? – superted

ответ

0

Следующий код работает -

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) 
0

ANSWER2 для ПРАВКА части -

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

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