使用外来字符抓取数据的问题

时间:2015-10-10 10:12:00

标签: python unicode encoding web-scraping

我编写了一个python脚本来从一些中文站点获取数据。根据它的头部charset是“gb2312”,并已检查它与“chardet.detect()”python库,它的正确,但我仍然得到错误的字符。这是我的代码:

import csv
import requests
import cssselect
from lxml import html

url = "http://www.example.com/"
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'}

mainPage = requests.get(url, headers = header)
tree = html.fromstring(mainPage.content)

with open('jd(test).csv', 'a', newline='') as csvfile:
    csvwriter = csv.writer(csvfile, delimiter=',')
    main_info = ["URL", "CAT-Name Original", "CAT-Name Converted"]
    csvwriter.writerow(main_info)

    for link in tree.cssselect("div#allsort div div.m div.mc dl dd em a"):
        urls = [link.get('href')]
        text = link.text

        print (urls)

        convertedText = text.encode('gb2312')

        print (text)
        print (convertedText)

        row_info = [urls, text, convertedText]

        csvwriter.writerow(row_info)

输出:

['http://example.com/']
戏曲综艺
b'\xcf\xb7\xc7\xfa\xd7\xdb\xd2\xd5'

1 个答案:

答案 0 :(得分:1)

你问的不行;编码仅适用于字符集,您需要翻译

您可以使用py-translate来获取它,这是Google的一个界面,但显然可以免费使用。

Python 3.4.3 (default, Mar 27 2015, 02:30:53) [GCC] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from translate import translator
>>> translator('zh-Tw', 'en', '戏曲综艺')
[[['Opera Arts', '戏曲综艺', 0]], 'zh-TW']
>>>

我并不完全熟悉该工具,因此您最好查看许可证。

  

如果不使用任何第三方进行翻译,我需要做些什么?

根据定义,如果您不想使用任何第三方,您唯一的选择是学习中文。在一些可能是可行的选择的服装。 案例:我工作的公司需要一些中文翻译。然后更多。和更多。首先他们聘请了翻译。然后是一名中国实习生,并为两位开发人员组织了一门中文课程。根据数据量,它可以在经济上方便。

但我认为你想要某种免费(如啤酒)工具。问题在于,大多数工具要么非常业余,最多会以某种形式或其他形式发出Engrish,或不自由;它们可能是试验,或“个人使用”。事实上,开发这些工具的人需要投入大量的工作,他们可以理解地寻求某种投资回报。你至少应该问自己,我应该回馈什么?我回馈什么(知情与否)?。不幸的是 - 直到稀缺后的奇点 - 这适用于所有

你可以尝试例如没有“合理或个人使用”限制的Baidu service我可以很容易地看到,但是他对你的隐私提出了自己的看法(“百度特此提醒用户,你输入百度翻译的内容将不予考虑作为您的私人个人信息。“)。只要你不翻译任何东西...... 有争议的 ......应该没有问题。

相关问题