2016-12-23 9 views
0

https://automatetheboringstuff.comからウェブサイトをスクラップする方法を学びました。内容が中国語であるhttp://www.piaotian.net/html/3/3028/1473227.htmlをスクラップして、その内容を.txtファイルに書きたいと思っていました。しかし、.txtファイルにはランダムなシンボルが含まれています。これはエンコード/デコードの問題です。中国語の文字を掻き集める

私はこのスレッド「how to decode and encode web page with python?」を読んで、自分のサイトのエンコード方法が「gb2312」と「windows-1252」であると考えました。私はこれらの2つのエンコード方法でデコードしようとしましたが失敗しました

誰かが私のコードの問題を親切に説明できますか?私は非常にプログラミングに新しいので、私も誤解を教えてください!

また、コードから "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/> 

要求は、自動的にサーバからコンテンツをデコードします。ほとんどの ユニコード文字セットはシームレスにデコードされます。

リクエストを行うと、Requestsは、HTTPヘッダーに基づいてレスポンスの エンコーディングについての知識を推測します。 r.textにアクセスすると、Requestsによって推測される のテキストエンコードが使用されます。あなたはどのようなエンコーディングの要求が使用している を見つけると、r.encoding プロパティを使用して、それを変更することができます

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

あなたはエンコーディングを変更する場合は、呼び出すたび、要求が r.encodingの新しい値を使用します。 r.text。

+0

作業コードをありがとう!あなたは "GBK"の使い方をどうやって考えましたか?そして、私がこれを使うならば、text = novel.text text = text.decode( "GBK")。encode( "utf-8")なぜ動作しませんでしたか? – idkla

+0

'GBK'、 'gb2312'、または 'utf-8'は試してみてください。ほとんどの場合、動作します。また、.textを使用する前にエンコード部分を行います。 –

+0

大変ありがとうございます! – idkla

関連する問題