为什么Beautiful Soup无法显示表格中的所有<td>数据?
我一周前尝试从维基百科上抓取数据,但我搞不懂为什么用Beautiful Soup只能从某些表格列中提取到字符串,而其他表格列却显示“none”。
注意:这些表格列里都有数据。
我的程序是想提取所有带有“description”标签的表格列。我想从表格中提取所有的描述信息。
我抓取的网站是: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
所有的描述字符串都是空的吗?根据文档的说明:
为了方便,如果一个标签只有一个子节点,并且那个子节点是字符串,那么你可以通过标签的
tag.string
和tag.contents[0]
来访问这个子节点。
在这种情况下,描述通常会有子节点,比如一个指向另一个维基百科文章的 <a>
链接。这种情况被认为是一个 非字符串 的子节点,所以描述节点的 string
会被设置为 None
。