為什麼python beautifulsoup解析網頁後網頁內容丟失?

源碼:

#coding:utf-8
import bs4

file=open("E:\sinaansi1.txt","r")
text=file.read()
print text

soup=bs4.BeautifulSoup(text,from_encoding="gb18030")
print unicode(soup.prettify())

問題背景:

打算用beautifulsoup解析一個新浪微博的網頁,為了繞過登陸所以在用瀏覽器登陸後將源代碼複製到本地。網頁應該是用utf-8編碼的,如圖:

但在將源碼保存到本地txt時,出現編碼錯誤,如圖:

若以utf-8或unicode保存,不知為何print bs4.BeautifulSoup(...)後&&里的內容都不見了,所以最終以ansi保存。

問題:

重點在於,執行了問題描述開頭代碼的第2個 print 後,結果如圖(部分):

然而在對應位置的網頁源代碼(即執行了上文代碼第一個 print 後的結果)如圖:

我很好奇問什麼經過beautifulsoup解析後圖片紅圈後面部分的內容全部消失了,而紅圈前面的部分是正常的。糾結了一晚上無果。。。。

猜想:

1.估計與beautifulsoup的某些特性有關。

2.估計是編碼問題。

說的有點亂,希望大家能看明白我在說啥,謝啦!


可能的原因是由於你處理的文檔太大,而處理的解析器緩存不夠造成的信息丟失。可以換一個解析器試試,你使用的應該是lxml吧,試試html.parser。

soup = BeautifulSoup(page.text,"html.parser")

應該是這樣的


最近剛好在學習BeautifulSoup,題主的問題應該是編碼的問題。建議把prettify()去掉試試。

另外如果想繞過登錄的話,除了模擬登錄外,還可以複製登錄後的cookie,並以字典的形式傳入requests中。

如果想讓requests自動管理cookie的話可以用Sessoin方法,但是要把dict類型的cookie轉換為cookiejar類型:

#將字典轉為CookieJar:

cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True)

#其中cookie_dict是要轉換字典

轉換完之後就可以把它賦給cookies 並傳入到session中了:

s = requests.Session()

s.cookies = cookies

s.get(url)

注意,只有字典類型的cookie才需要做轉換,如果是模擬登陸的話不需要轉換,requests會自動處理。


或許windows記事本編碼問題吧。 用UBUNTU試試


推薦閱讀:

使用Flexbox碰到了什麼樣的坑?
用 :after 清除浮動,:before 處理 Margin Collpase 怎麼理解?
關於「真阿當」對目前流行前端技術的批判,大家有什麼看法?
在CSS中所謂「標準的盒模型」有幾種,IE早期的盒模型是標準盒模型嗎?
前端,準備年後跳槽,從現在開始準備,該制定怎樣的計劃?

TAG:前端開發 | HTML | Python | 編程 | beautifulsoup |