2014-12-07 68 views
0
from bs4 import BeautifulSoup 

html = 'index.html' 
soup = BeautifulSoup(open(html)) 
print len(soup.findAll('div')) 

該文件index.html是這個shopping webpage的源代碼。美麗的湯的findAll不計算所有div

我的代碼顯示只發現了1 div標記。但是什麼是怪異的findAll('a')返回一個巨大的(所以可能是正確的)號碼。 span工程等,但不是div

+0

發現一個'修復'...使用bs3工作:( – javatripping 2014-12-08 09:36:33

回答

1

您正在體驗BeautifulSoup在底層使用的differences between parsers

選擇要麼html.parser,或html5lib

>>> from bs4 import BeautifulSoup 
>>> html = 'index.html' 
>>> soup = BeautifulSoup(open(html), 'html') 
>>> len(soup.findAll('div')) 
0 
>>> soup = BeautifulSoup(open(html), 'lxml') 
>>> len(soup.findAll('div')) 
0 
>>> soup = BeautifulSoup(open(html), 'html.parser') 
>>> len(soup.findAll('div')) 
774 
>>> soup = BeautifulSoup(open(html), 'html5lib') 
>>> Alen(soup.findAll('div')) 
774 

請注意,如果你不這樣做specify a parserBeautifulSoup會自動把它撿起來:

如果不指定任何東西,你」將獲得安裝了 的最佳HTML解析器。 Beautiful Soup將lxml的解析器評爲最好,然後是 html5lib,然後是Python的內置解析器。

+0

我仍然只得到一個,當我使用html.parser(我試過從另一個SO問題!),但它似乎是它的爲你工作怪怪的 – javatripping 2014-12-07 06:14:22

+0

@javatripping ok,'html5lib'怎麼樣? – alecxe 2014-12-07 06:15:00

+0

會拋出一個錯誤,提示它沒有安裝(甚至在我'pip install'之後?) – javatripping 2014-12-07 06:16:51