我想識別並保存所有的標題在一個特定的網站,並不斷得到我認爲是編碼錯誤。BeautifulSoup漢字編碼錯誤
該網站是:http://paper.people.com.cn/rmrb/html/2016-05/06/nw.D110000renmrb_20160506_2-01.htm
當前的代碼是:
holder = {}
url = urllib.urlopen('http://paper.people.com.cn/rmrb/html/2016-05/06/nw.D110000renmrb_20160506_2-01.htm').read()
soup = BeautifulSoup(url, 'lxml')
head1 = soup.find_all(['h1','h2','h3'])
print head1
holder["key"] = head1
打印的輸出是:
[<h3>\u73af\u5883\u6c61\u67d3\u6700\u5c0f\u5316 \u8d44\u6e90\u5229\u7528\u6700\u5927\u5316</h3>, <h1>\u5929\u6d25\u6ee8\u6d77\u65b0\u533a\uff1a\u697c\u5728\u666f\u4e2d \u5382\u5728\u7eff\u4e2d</h1>, <h2></h2>]
我有理由相信這些都是Unicode字符,但我一直無法弄清楚如何說服python將它們顯示爲字符。
我試圖在別處找到答案。這是更清楚點這個問題是一個: Python and BeautifulSoup encoding issues
其建議增加
soup = BeautifulSoup.BeautifulSoup(content.decode('utf-8','ignore'))
但是這給了我,在留言中提到了同樣的錯誤(「AttributeError的
:對象類型‘BeautifulSoup’沒有屬性'BeautifulSoup'「) 刪除第二個'.BeautifulSoup'導致了不同的錯誤(」RuntimeError:調用Python對象時超出最大遞歸深度「)。
我也試過了答案這裏建議: Chinese character encoding error with BeautifulSoup in Python?
通過破壞對象
html = urllib2.urlopen("http://www.515fa.com/che_1978.html")
content = html.read().decode('utf-8', 'ignore')
soup = BeautifulSoup(content)
的創建,但也產生了遞歸誤差。任何其他提示將不勝感激。
感謝
哦,這個人太親近了!這用於打印文本,這讓我希望這些數據是正確的。但是,當我試圖將其添加到字典時,它恢復爲unicode。我分解了第9步,所以'g = soup.h3.text.encode(「utf-8」)。decode(「unicode-escape」)'然後'print(g)'。這工作得很好。但是當我試圖將g添加到名爲holder的字典時:'holder [「key」] = g'然後是'print holder',我又得到了unicode輸出。最終我想輸出字典到CSV,我想確保它是正確的通過鏈。 – user5356756
@ user5356756,這只是repr表示http://stackoverflow.com/questions/1436703/difference-between-str-and-repr-in-python,嘗試從字典打印值本身,你應該看到相同的。也根據答案的結尾,你應該真正升級到bs4 –
gotcha,謝謝!這樣可行。使用dictwriter將字典轉移到csv時遇到了麻煩,但這遠遠超出了這個問題的範圍,因此我會做一些研究並在需要時開放一個新的研究。至於bs4,我的腳本的第一行(我沒有在上面重現)是'from bs4 import BeautifulSoup'。爲了從3切換到4,我還需要做些什麼嗎? – user5356756