Как распечатать все ячейки строки таблицы в Beautiful Soup - PullRequest
0 голосов
/ 15 мая 2018

Я только начинаю изучать, как использовать Beautiful Soup.

В качестве упражнения я выбрал эту страницу из ESPN .

Там есть таблицас игроками НБА и их фантазийными рядами.Мне удалось распечатать всю строку, и она показывает все, что я вижу в своем браузере.

Однако, когда я иду печатать каждую ячейку отдельно, она печатает «Нет», потому что по какой-то причине она можетне разбираю ячейку с якорем

Вот мой код ниже:

from bs4 import BeautifulSoup

import urllib2
import re

if __name__ == '__main__':
   url = "http://www.espn.com/espn/print?id=20443164"
   resp = urllib2.urlopen(url)
   soup = BeautifulSoup(resp.read())

   table = soup.find_all("table")
   mytable = table[2]
   rows = mytable.findChildren(['th','tr'])
   print rows
   for row in rows:
       cells = row.findChildren('td')
       for cell in cells:
#           print cell.string  # line in question
           print cell  # line in question

Если я использую

print cell

, я получаю следующий вывод:

<td>1. <a href="http://www.espn.com/nba/player/_/id/3032977/giannis-antetokounmpo">Giannis Antetokounmpo</a>, SF/PF</td>
<td>PHI</td>
<td>C24</td>

Если я использую

print cell.string

, я получаю следующий вывод:

None
MIL
SF1

Так как я могу распечатать все без тегов "td", но распознать всев первой ячейке без печати «Нет»?

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Вы можете сделать что-то вроде этого -

print (cell.text)

Это позволит вам получить текст внутри ячейки, пропуская все теги init.

0 голосов
/ 15 мая 2018

Из официальной документации относительно .string (выделено мое):

.string

  • Если у тега есть только один дочерний элемент, и этот дочерний элемент является NavigableString, дочерний элемент становится доступным как .string

  • Если единственным потомком тега является другой тег, и этот тег имеет .string, то считается, что родительский тег имеет тот же .string, что и его дочерний элемент

  • Если тег содержит более одной вещи, то неясно, на что должен ссылаться .string, поэтому .string определяется как None

Что они имеют в виду под Если тег содержит более одной вещи, означает, что если тег содержит другой тег, tag.string оценивается как None. По этой причине вы получаете None для первого тега <td> в вашем коде (так как он содержит другой тег <a>).

Итак, чтобы получить полный текст тега, вы можете использовать get_text(). Итак, в вашем коде используйте cell.get_text().

Или, для этого случая, вы также можете использовать cell.text. .text совпадает с get_text(), который вы можете увидеть в исходном коде :

text = property(get_text) 
0 голосов
/ 15 мая 2018

попробуйте это в вашем последнем цикле.изменить cell.string на cell.text

for cell in cells:
    print cell.text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...