在抓取网页后将解码结果输入终端'外语题名

时间:2014-10-05 04:19:59

标签: python unicode

enter code here如果您运行下面的程序来抓取网页'日语中的标题,我得到的结果是未解码的。你能帮助我用正确的语言得到结果吗?

(我的终端设置为utf-8。)

# coding: UTF-8
import codecs
import sys
import urllib
import re

urls = ["http://docs.python.jp/2/howto/regex.html", "http://docs.python.jp/2/library/urllib.html", "http://docs.python.jp/2/library/re.html"]
i = 0
regex = "<title>(.+?)</title>"
pattern = re.compile(regex)

while i< len(urls):
    htmlfile = urllib.urlopen(urls[i])
    htmltext = htmlfile.read()
    titles = re.findall(pattern, htmltext)

    print titles
    i +=1

如果我运行此文件,我会得到这些:

['\xe6\xad\xa3\xe8\xa6\x8f\xe8\xa1\xa8\xe7\x8f\xbe HOWTO &mdash; Python 2.7ja1 documentation']
['20.5. urllib \xe2\x80\x94 URL \xe3\x81\xab\xe3\x82\x88\xe3\x82\x8b\xe4\xbb\xbb\xe6\x84\x8f\xe3\x81\xae\xe3\x83\xaa\xe3\x82\xbd\xe3\x83\xbc\xe3\x82\xb9\xe3\x81\xb8\xe3\x81\xae\xe3\x82\xa2\xe3\x82\xaf\xe3\x82\xbb\xe3\x82\xb9 &mdash; Python 2.7ja1 documentation']
['7.2. re \xe2\x80\x94 \xe6\xad\xa3\xe8\xa6\x8f\xe8\xa1\xa8\xe7\x8f\xbe\xe6\x93\x8d\xe4\xbd\x9c &mdash; Python 2.7ja1 documentation']

1 个答案:

答案 0 :(得分:1)

问题似乎是re.findall函数返回了一个列表。通过打印列表,您的编码将丢失。这是一个快速解决方法:

import codecs
import sys
import urllib
import re

urls = ["http://docs.python.jp/2/howto/regex.html", "http://docs.python.jp/2/library/urllib.html", "http://docs.python.jp/2/library/re.html"]
i = 0
regex = "<title>(.+?)</title>"
pattern = re.compile(regex)

while i< len(urls):
    htmlfile = urllib.urlopen(urls[i])
    htmltext = htmlfile.read()
    titles = re.findall(pattern, htmltext)

    print titles[0]
    i +=1

我添加了标题[0]

结果是:

正規表現 HOWTO &mdash; Python 2.7ja1 documentation
20.5. urllib — URL による任意のリソースへのアクセス &mdash; Python 2.7ja1 documentation
7.2. re — 正規表現操作 &mdash; Python 2.7ja1 documentation

***Repl Closed***