【问题标题】:Python Webscraping EncodingPython网页抓取编码
【发布时间】:2015-08-27 15:48:28
【问题描述】:

我似乎无法让程序识别 u'\xe9'(即“é”)。它似乎正在阅读 ascii 中的页面,这可能是问题所在。所以它不能正确打印“coupe”。任何想法如何解决这个问题?

from lxml import html
import requests

new_list = []
page=requests.get('http://www.carfolio.com/specifications/models/?man=557')
tree=html.fromstring(page.text)
model_name = tree.xpath('//span[@class="model name"]/text()'.encode('utf-8'))
for elem in model_name:
    new_list.append(elem)
    if u'\xe9' in elem:
        u'\xe9'.encode('latin-1')
        print(elem)

我以前从未处理过编码问题。我可以轻松地删除包含那个麻烦字节的元素,但那是删除我需要的数据。如果我切换编码,它会给我带来更奇怪的结果。

*python 3

【问题讨论】:

    标签: python-3.x encoding decode url-encoding


    【解决方案1】:

    替换

    print(elem)
    

    for char in elem:
        print(bytes(char, 'latin-1').decode('latin-1'), end='')
    print('')
    

    或者

    print(bytes(elem, 'latin-1').decode('latin-1'), end='')
    

    【讨论】:

    • 这似乎仍然给我一个 ascii 错误。我一直在使用 atom,所以它可能无法正常工作。我会尝试 sublime 和 python IDE。
    • R8 CoupTraceback(最近一次调用最后一次):文件“/Users/animachristietmaria/Documents/CarsClass.py”,第 14 行,在 print(char, end='') UnicodeEncodeError: ' ascii' 编解码器无法在位置 0 编码字符 '\xe9':序数不在范围内(128)
    • @Matty 我更新了我的答案,理论上它应该可以工作,但是,我们都知道代码并不总是这样做。
    【解决方案2】:
    from lxml import html
    import requests
    
    new_list = []
    page=requests.get('http://www.carfolio.com/specifications/models/?man=557')
    tree=html.fromstring(page.text)
    model_name = tree.xpath('//span[@class="model name"]/text()'.encode('utf-8'))
    print(len(model_name))
    for elem in model_name:
        for char in elem:
            if "é" not in char:
                print(char, end='')
        print(' ')
    

    这至少保留了相同数量的元素,只是忽略了那个麻烦的 é 野兽。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-12
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多