Используя Beautifulsoup, как ссылаться на строки таблицы в HTML-странице - PullRequest
1 голос
/ 30 июля 2010

У меня есть HTML-страница, которая выглядит как:

    <html>

    ..

    <form post="/products.hmlt" ..>
    ..

    <table ...>
    <tr>...</tr>
    <tr>
       <td>part info</td>
    ..
    </tr>

    </table>

    ..


</form>

..

</html>

Я пытался:

form = soup.findAll('form')

table = form.findAll('table')  # table inside form

Но я получаю сообщение об ошибке:

Объект ResultSet не имеет атрибута 'findAll'

Я полагаю, что вызов findAll не возвращает объект 'beautifulsoup'? что я могу сделать тогда?

Обновление

На этой странице много таблиц, но только 1 таблица ВНУТРИ тега, показанного выше.

Ответы [ 2 ]

3 голосов
/ 30 июля 2010

findAll возвращает список, поэтому сначала извлеките элемент:

form = soup.findAll('form')[0]
table = form.findAll('table')[0]  # table inside form

Конечно, вы должны выполнить некоторую проверку ошибок (т.е. убедиться, что она не пустая) перед индексацией в списке.*

2 голосов
/ 30 июля 2010

Мне нравится ответ ars, и, конечно, я согласен с необходимостью проверки ошибок;
особенно если это будет использоваться в любом виде производственного кода.

Вот, пожалуй, более подробный / явный способ поиска искомых данных:

from BeautifulSoup import BeautifulSoup as bs
html = '''<html><body><table><tr><td>some text</td></tr></table>
    <form><table><tr><td>some text we care about</td></tr>
    <tr><td>more text we care about</td></tr>
    </table></form></html></body>'''    
soup = bs(html)

for tr in soup.form.findAll('tr'):
    print tr.text
# output:
# some text we care about
# more text we care about

Для справки приведен исправленный HTML:

>>> print soup.prettify()
<html>
 <body>
  <table>
   <tr>
    <td>
     some text
    </td>
   </tr>
  </table>
  <form>
   <table>
    <tr>
     <td>
      some text we care about
     </td>
    </tr>
    <tr>
     <td>
      more text we care about
     </td>
    </tr>
   </table>
  </form>
 </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...