2013-01-14 42 views
4

我正在使用BeautifulSoup,並且想出了一個錯誤或者是我的錯誤。在我的例子,我爬紐約時報的子部分網站...BeautifulSoup只返回頭標內部的內容

import urllib2 
from bs4 import BeautifulSoup 
website = "http://www.nytimes.com/pages/politics/index.html" 
data = BeautifulSoup(urllib2.urlopen(website).read()) 
print data 

當我運行的代碼,我用頭標籤返回的,什麼是它裏面。但是,它不會抓住身體標籤內的內容。如果我要將網址更改爲http://www.nytimes.com,則BS將返回完整頁面源。這裏發生了什麼,以及爲什麼當我抓取http://www.nytimes.com/pages/politics/index.html時沒有獲取身體標記?

+0

無法複製下面的錯誤進行了說明。當我運行這個代碼時,它會得到整個頁面,而不僅僅是'head'標籤。 –

+0

嗯......問題中的代碼是逐字的,以我的文件中的內容。我會說它也抓住了'html'標籤。它只是像'body'標籤不存在一樣。 – jason328

+0

您使用的是什麼版本的BeautifulSoup?並且要清楚的是,如果在上面的代碼(僅僅是上面的代碼)之後打印'data.body',它會打印'None'? (對我來說,它打印'body'標籤的內容) –

回答

1

這不是BeautifulSoup中的錯誤。問題實際上是因爲bs4使用內置的HTMLParser,它對格式不正確的HTML並不是很寬鬆,並且由於W3C Markup Validation Service顯示HTML確實格式不正確,並且很少有未封閉,雜散和錯位的標記導致HTMLParser,隨後BeautifulSoup突然停止解析。

此問題已起訴BeautifulSoup

BS4 stops parsing after malformed tag