2014-11-13 64 views
1

我正在使用BeautifulSoup解析來自this page的一堆鏈接,但它並沒有提取我想要的所有鏈接。要嘗試並找出原因,我下載HTML以「web_page.html」跑美麗的湯沒有得到完整的網頁

soup = BeautifulSoup(open("web_page.html")) 
print soup.get_text() 

我注意到它不打印整個網頁。它結束於布拉克利。我查看了html代碼,看看'Brackley'是否有些奇怪的事情發生,但我找不到任何東西。另外,如果我將另一個鏈接移動到Brackley的位置,它會打印出來,而不是Brackley。它似乎只會讀取一定大小的html文件?

回答

2

嘗試使用不同的解析器。你沒有指定一個,所以你可能使用默認的html.parser。嘗試使用lxmlhtml5lib

欲瞭解更多信息:http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser

+0

這也是我的第一個想法,但在'html5lib','html.parser','lxml'之間切換沒有區別 - 至少對於我使用的方法而言。謝謝。 – alecxe

+0

@Mikki。謝謝。 html5lib爲我工作。我通過'save page as'從chrome獲得了html。我仍然困惑爲什麼其他解析器不工作... – Ben

2

不知道你怎麼樣了頁面和鏈接,這裏是我做的,並得到了所有的鏈接從「加拿大」開始,以「Taloyoak,HAM」的結局:

from bs4 import BeautifulSoup 
import requests 

url = 'http://www12.statcan.gc.ca/census-recensement/2006/dp-pd/tbt/Geo-index-eng.cfm?TABID=5&LANG=E&APATH=3&DETAIL=0&DIM=0&FL=A&FREE=0&GC=0&GID=0&GK=0&GRP=1&PID=99015&PRID=0&PTYPE=88971,97154&S=0&SHOWALL=0&SUB=0&Temporal=2006&THEME=70&VID=0&VNAMEE=&VNAMEF=&D1=0&D2=0&D3=0&D4=0&D5=0&D6=0' 
response = requests.get(url) 

soup = BeautifulSoup(response.content) 
print [a.text for a in soup.select('div.span-8 ol li a')] 

打印:

[ 
    u'Canada', 
    u'Newfoundland and Labrador/Terre-Neuve-et-Labrador', 
    ... 
    u'Gjoa Haven, HAM', 
    u'Taloyoak, HAM' 
] 

FYI,div.span-8 ol li aCSS Selector

+1

正像另迴應,我也得到了這樣的結果。 – Crazy

+0

@alecxe。感謝您的回答。我正在使用httplib2來獲取頁面,但這不起作用,所以我切換到使用'save page as'從chrome保存文件。很高興知道請求可以直接使用。沒有想到/知道去嘗試。 – Ben