$ python3 utf8.py
/usr/bin/torsocks /usr/bin/wget -q -O - --user-agent="Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20
100101 Firefox/17.0" http://xiwayy2kn32bo3ko.onion/test/read.cgi/tor/1371355627/978n
Traceback (most recent call last):
File "utf8.py", line 13, in <module>
data = subprocess.getoutput( cmd )
File "/usr/lib/python3.3/subprocess.py", line 707, in getoutput
return getstatusoutput(cmd)[1]
File "/usr/lib/python3.3/subprocess.py", line 683, in getstatusoutput
text = pipe.read()
File "/usr/lib/python3.3/codecs.py", line 300, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 1674: invalid start byte
特に国際的なインターネット、中国語のページなどを解析するために、python3に移行しますが、そこでこの問題に遭遇します。
私の単純なコードは wget の周りの python ラッパーです。禁止をかわす最も簡単な方法だからです。
$ cat utf8.py
#!/usr/bin/python3
import subprocess
from bs4 import BeautifulSoup
url = 'http://xiwayy2kn32bo3ko.onion/test/read.cgi/tor/1371355627/978n'
user_agent = "Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20100101 Firefox/17.0"
wget_cmd = '/usr/bin/wget -q -O - --user-agent="' + user_agent + '" '
torsocks_cmd = '/usr/bin/torsocks '
cmd = torsocks_cmd + wget_cmd + url
print( cmd )
data = subprocess.getoutput( cmd )
print( "Fetch complete" )
print( data )
http://xiwayy2kn32bo3ko.onion/test/read.cgi/tor/1371355627/978n
一例ですが、onion-webです。
なぜ python3.3 の codecs.py は存在するものすべてを理解していなかったのですか?
サブプロセスは、フェッチされたデータを復元する機会なしにクラッシュしました。
どの言語でも html ページを取得して解析するための普遍的な国際的な方法はありますか? 私は、utf-8 がこのタスクのために開発されたと確信していました。
対象ページ:Shift_JISエンコード
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=Shift_JIS">
私の主な質問は次のとおりです。あらゆるエンコーディング、あらゆる言語に対して、普遍的にどのように行うべきか。そのタスクにはどの言語を使用するのが良いですか? html はどのように解析する必要がありますか?
そのような作業にはどのような器具を使用すればよいですか?