Почему Beautiful Soup не может отобразить все данные <td>в таблицах? - PullRequest
0 голосов
/ 18 мая 2011

Я пытался пролистать Википедию неделю назад. Но я не мог понять, почему Beautiful Soup покажет только некоторую строку из столбца таблицы и покажет «нет» для другого столбца таблицы.

ПРИМЕЧАНИЕ: все столбцы таблицы содержат данные.

Моя программа извлечет все столбцы таблицы с тегом «описание». Я пытаюсь извлечь все описание из таблицы.

Сайт, который я просматриваю: http://en.wikipedia.org/wiki/Supernatural_(season_6)

Это мой код:

from BeautifulSoup import BeautifulSoup 
import urllib
import sys
from urllib import FancyURLopener

class MyOpener(FancyURLopener):
    version = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24'


def printList(rowList):
    for row in rowList:
        print row
        print '\n'

    return

url = "http://en.wikipedia.org/wiki/Supernatural_(season_6)"

#f = urllib.urlopen(url)
#content = f.read()
#f.close

myopener = MyOpener()
page = myopener.open(url)
content = page.read()
page.close()

soup = BeautifulSoup(''.join(content))
soup.prettify()

movieList = []

rowListTitle = soup.findAll('tr', 'vevent')
print len(rowListTitle)

#printList(rowListTitle)
for row in rowListTitle:
    col = row.next # explain this?
    if col != 'None':
        col = col.findNext("b")
        movieTitle = col.string
        movieTuple = (movieTitle,'')
        movieList.append(movieTuple)

#printList(movieList)

for row in movieList:
    print row[0]

rowListDescription = soup.findAll('td' , 'description')
print len(rowListDescription)


index = 1;
while ( index < len(rowListDescription) ):
    description = rowListDescription[index]
    print description
    print description.string
    str = description
    print '####################################'
    movieList[index - 1] = (movieList[index - 1][0],description)
    index = index + 1

Я не вставил вывод, так как он действительно длинный. Но вывод действительно странный, поскольку ему удалось захватить информацию в <td>, но когда я делаю .string, он дает мне пустой контент.

1 Ответ

0 голосов
/ 18 мая 2011

Все ли строки описания пустые?Из документации:

Для вашего удобства, если у тега есть только один дочерний узел, а этот дочерний узел является строкой, дочерний узел становится доступным как tag.string, а также tag.содержание [0].

В этом случае описание часто имеет дочерние узлы, то есть: <a> ссылка на другую статью в Википедии.Это считается как нестроковый дочерний узел, и в этом случае string для узла описания устанавливается на None.

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