2013-07-15 50 views
6

我想使用BeautifulSoup從網站中提取內容(http://brooklynexposed.com/events/)。正如我可以運行下面的代碼問題的一個例子:BeautifulSoup沒有提取所有的HTML(自動刪除大部分頁面的html)

import urllib 
import bs4 as BeautifulSoup 

url = 'http://brooklynexposed.com/events/' 
html = urllib.urlopen(url).read() 

soup = BeautifulSoup.BeautifulSoup(html) 
print soup.prettify().encode('utf-8') 

輸出似乎切斷HTML如下:

 <li class="event"> 
     9:00pm - 11:00pm 
     <br/> 
     <a href="http://brooklynexposed.com/events/entry/5432/2013-07-16"> 
     Comedy Sh 
     </a> 
     </li> 
     </ul> 
    </div> 
    </div> 
    </div> 
    </div> 
</body> 
</html> 

它沿着切斷上市名稱爲喜劇表演與所有的HTML,直到最後的結束標籤。大多數的html被自動刪除。我在很多網站上注意到類似的事情,如果頁面太長,BeautifulSoup無法解析整個頁面,只是刪除文本。有沒有人有這個解決方案?如果BeautifulSoup無法處理這些頁面,是否有人知道其他類似於prettify()的函數庫?

+3

你的代碼對我來說很好。如果網絡傳輸在那個時間點被中斷(所以你只能裝載到「喜劇Sh」),那麼HTML解析器將「關閉」所有仍然打開的標籤,並且你確切地看到你得到了什麼。 –

+1

對我而言,整個內容都在那裏。從您的代碼開始創建'soup'對象:'>>> len(unicode(soup))'''107578'您使用的是哪個版本的BS?我正在使用4.2.0。 –

+0

有趣的是,我在Python 2.7中使用4.2.1。但是,當我使用3.2它似乎工作。它不可能是超時問題,因爲如果我將原始HTML打印到一個文件中,那麼所有文本都會出現。有關2.7解決方案的任何其他想法?否則,是時候開始移植我的代碼了。 – user2540231

回答

0

它的工作爲我好,但我得到的錯誤,當我說soup.prettify().encode('utf-8')

>>> from BeautifulSoup import BeautifulSoup as bs 
>>> 
>>> import urllib 
>>> url = 'http://brooklynexposed.com/events/' 
>>> html = urllib.urlopen(url).read() 
>>> 
>>> 
>>> soup = bs(html) 
>>> soup.prettify().encode('utf-8') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 8788: ordinal not in range(128) 
>>> 
>>> soup.prettify() 
'<!doctype html>\n<!--[if lt IE 7 ]&gt; 
&lt;html class="no-js ie6" lang="en"&gt; &lt;![endif]-->\n 
<!--[if IE 7 ]&gt; 
... 
... 
... 
... 
</body>\n</html>\n' 

。 。 。 。 我想這可能會幫助你:BeautifulSoup, where are you putting my HTML?

0

我有麻煩,bs4削減一些機器上的html和一些沒有。這不是可重放....

我切換到這一點:

soup = bs4.BeautifulSoup(html, 'html5lib') 

..和現在的工作。

相關問題