為什麼python beautifulsoup解析網頁後網頁內容丟失?
源碼:
#coding:utf-8
import bs4file=open("E:\sinaansi1.txt","r")
text=file.read()
print textsoup=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 = cookiess.get(url)注意,只有字典類型的cookie才需要做轉換,如果是模擬登陸的話不需要轉換,requests會自動處理。或許windows記事本編碼問題吧。 用UBUNTU試試
推薦閱讀:
※使用Flexbox碰到了什麼樣的坑?
※用 :after 清除浮動,:before 處理 Margin Collpase 怎麼理解?
※關於「真阿當」對目前流行前端技術的批判,大家有什麼看法?
※在CSS中所謂「標準的盒模型」有幾種,IE早期的盒模型是標準盒模型嗎?
※前端,準備年後跳槽,從現在開始準備,該制定怎樣的計劃?
TAG:前端開發 | HTML | Python | 編程 | beautifulsoup |