2014-08-29 5 views
-1

Я пытаюсь прокрутить таблицу по строкам и напечатать определенные td. Я могу печатать каждую по отдельности, но я не уверен, как я могу печатать оба td, которые находятся в одной строке одновременно. Я хочу знать, где я размещаю петли for и тег печати, чтобы заставить это работать.Python: Beautifulsoup - Разбор таблицы

<div id="main"> 
    <table> 
     <tbody> 
      <tr> 
       <td><span class="bold">answer</span> </td> 
       <td></td> 
       <td> 
        <option value="1|0|%" selected="selected">%</option> 
        <option value="100|0|fraction">fraction</option> 
        <option value="100|0|ratio">ratio</option> 
       </td> 
      </tr> 
     </tbody> 
    </table> 
</div> 

и моя попытка добиться этого

def summary(url, i): 
html = wget(url) 
soup = BeautifulSoup(html) 
    for row in soup.findAll('div', {'id': 'main'}): 
     for ops in row.findAll('tr'): 
      for tds1 in ops.findAll('td'): 
       for opt in tds1.findAll('option', {'selected': 'selected'}): 
        return opt 
     for ops in row.findAll('tr'): 
      for tds1 in ops.findAll('td'): 
       for spans in tds1.findAll('span', {'class': 'bold'}): 
        return spans 
      print (i, opt, spans) 
+1

HTML, который вы анализируете и ожидаемый результат, поможет исправить код – shaktimaan

+0

Уверены ли вы, что вы вернули опцию в свой код? Это означало бы, что этот код никогда ничего не печатает. Также похоже, что есть проблема с отступом: уверены ли вы, что строки, начинающиеся с 'soup', отступают? –

+0

Кроме того, что вы подразумеваете под «печатью в одной строке одновременно»? –

ответ

0

Подумайте о том, что вы хотите сделать на английском языке, а затем решить, как перевести его на Python.

Вы хотите пойти по строке, а затем распечатать оба столбца, которые находятся в строке на одной строке. У вас уже есть большая часть кода, который делает это:

# Go row by row 
for ops in row.findAll('tr'): 
    # Go column by column 
    for tds1 in ops.findAll('td'): 
     # Print columns on the same line 
     print(tds1, end=' ') 
    # Make sure to end each line after the last column 
    print() 

Я не знаю, что все, что другой код ваш для-почему вы делаете внешний цикл в два раза, почему вы ищете для других вещей в столбце, почему вы возвращаетесь, как только вы находите первое значение и т. д., но print с end = ' ' - это та часть, которую вам не хватает: так вы печатаете несколько вещей в одной строке.

+0

Я не хочу печатать все теги td или все данные в тегах td, только первый td и параметр выбирают в другом теге td. Я добавил html-формат, который я пытаюсь разобрать – Marqui678

+0

Я не уверен, как структурировать то, что я пытаюсь сделать. Я получаю сообщение об ошибке при запуске кода. '/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python /Users/mike/PycharmProjects/convertHtml/tables_parse.py Файл« /Users/mike/PycharmProjects/convertHtml/tables_parse.py », строка 42 печать (tds1, конец =»«) ^ SyntaxError: неверный синтаксис Процесс закончил с кодом выхода 1' – Marqui678

+0

@ Marqui678: ОК, так что вы используете Python 2.7, но при попытке использовать Python 3-стиль 'печати '-а-функции-вызовы. Ваш исходный код уходит с этим, хотя он добавляет дополнительные круглые скобки и «переводит» каждый элемент вместо 'str'ing, потому что он не использует аргументы ключевых слов; Я добавил 'end = ''', что заставляет его сломаться. Если вы хотите сделать «print» 3.x в 2.7, вам нужно «от __future__ import print_function» вверху вашего файла. Если вы хотите сделать инструкции 'print' 2.x в стиле, избавьтесь от этих круглых скобок в своих операторах' print' и измените значение 'end = ''' на просто завершающий ','. – abarnert

Смежные вопросы