2016-12-23 30 views
0

我學會了如何從https://automatetheboringstuff.com中刪除網站。我想取消其中內容爲中文的http://www.piaotian.net/html/3/3028/1473227.html,並將其內容寫入.txt文件。但是,.txt文件包含隨機符號,我認爲這是一個編碼/解碼問題。拼音漢字python

我讀過這個主題「how to decode and encode web page with python?」,並認爲我的網站的編碼方法是「gb2312」和「windows-1252」。我試圖用這兩種編碼方法解碼,但失敗了。

有人可以向我解釋我的代碼問題嗎?我對編程非常陌生,所以請讓我知道我的錯誤觀念!

此外,當我從代碼中刪除「html.parser」時,.txt文件變成空的,而不是至少有符號。爲什麼會這樣?

import bs4, requests, sys 

reload(sys) 
sys.setdefaultencoding("utf-8") 

novel = requests.get("http://www.piaotian.net/html/3/3028/1473227.html") 
novel.raise_for_status() 

novelSoup = bs4.BeautifulSoup(novel.text, "html.parser") 

content = novelSoup.select("br") 

novelFile = open("novel.txt", "w") 
for i in range(len(content)): 
    novelFile.write(str(content[i].getText())) 
+0

您只需要在網站上找到正確的編碼並應用即可。這裏是關於agenty的詳細教程 - https://www.agenty.com/doc/hosted-app/248/scraping-chinese-or-japanese-websites –

回答

1
novel = requests.get("http://www.piaotian.net/html/3/3028/1473227.html") 
novel.raise_for_status() 
novel.encoding = "GBK" 
novelSoup = bs4.BeautifulSoup(novel.text, "html.parser") 

出來:

<br> 
    一元宗,坐落在青峯山上,綿延極長,現在是盛夏時節,天空之中,太陽慢慢落了下去,夕陽將影子拉的很長。<br/> 
<br/> 
    一片不是很大的小湖泊邊上,一個約莫着十七八歲的青衣少年坐在湖邊,抓起湖邊的一塊石頭扔出,頓時在湖邊打出幾朵浪花。<br/> 
<br/> 
    葉希文有些茫然,他沒想到,他居然穿越了,原本葉希文只是二十一世紀的地球上一個普通的大學生罷了,一個月了,他才後知後覺的反應過來,這不是有人和他進行惡作劇,而是,他真的穿越了。<br/> 

請求將自動解碼來自服務器的內容。大多數 unicode charsets被無縫解碼。

當您提出請求時,請求會根據HTTP標頭對響應的 編碼進行有根據的猜測。當您訪問r.text時,使用Requests猜測的文本編碼 。你可以找出使用 什麼編碼的要求,並改變它,使用r.encoding 屬性:

>>> r.encoding 
'utf-8' 
>>> r.encoding = 'ISO-8859-1' 

如果更改編碼,請求將每當調用使用 r.encoding的新價值r.text。

+0

感謝您的工作代碼!你怎麼知道如何使用「GBK」?如果我使用這個'text = text.decode(「GBK」)。encode(「utf-8」)'爲什麼它不起作用? – idkla

+0

'GBK','gb2312'或'utf-8',請嘗試,在大多數情況下,它會起作用。在使用.text之前先執行編碼部分。 –

+0

好的非常感謝你! – idkla