UnicodeDecodeError:' ascii'编解码器不能解码6233位的字节0xf0:序数不在范围内(128)

时间:2017-05-04 13:18:35

标签: python python-3.x web-scraping

我正在开发一个新项目,但我无法解决标题中的错误。

以下是代码:

#!/usr/bin/env python3.5.2

import urllib.request , urllib.parse


def start(url):
    source_code = urllib.request.urlopen(url).read()
    info = urllib.parse.parse_qs(source_code)
    print(info)


start('https://www.youtube.com/watch?v=YfRLJQlpMNw')

4 个答案:

答案 0 :(得分:3)

由于.encode工作在unicode对象上而发生错误。所以我们需要使用

将字节串转换为unicode字符串
.decode('unicode_escape')

所以代码将是:

#!/usr/bin/env python3.5.2

import urllib.request , urllib.parse


def start(url):
    source_code = urllib.request.urlopen(url).read()
    info = urllib.parse.parse_qs(source_code.decode('unicode_escape'))
    print(info)


start('https://www.youtube.com/watch?v=YfRLJQlpMNw')

答案 1 :(得分:1)

试试这个

source_code = urllib.request.urlopen(url).read().decode('utf-8')

答案 2 :(得分:1)

错误消息是自解释的:输入字符串中有一个字节0xf0,它应该是一个ascii字符串。

您应该已经给出了确切的错误消息以及它发生在哪一行,但我可以猜测这发生在info = urllib.parse.parse_qs(source_code)上,因为parse_qs需要unicode字符串或ascii字节字符串。 / p>

第一个问题是为什么要对来自youtube的数据发送parse_qs,因为Python Standart Library的文档说:

  

解析作为字符串参数给出的查询字符串(类型为application / x-www-form-urlencoded的数据)。数据作为字典返回。字典键是唯一的查询变量名称,值是每个名称的值列表。

因此,您要在=&字符上对其进行解析,将其解释为key1=value11&key2=value2&key1=value12形式的查询字符串,以提供{ 'key1': [ 'value11', 'value12'], 'key2': ['value2']}

如果你知道为什么要这样,你应该首先使用正确的编码将字节串解码为unicode字符串,或者如果不确定Latin1能够接受任何字节:

def start(url):
    source_code = urllib.request.urlopen(url).read().decode('latin1')
    info = urllib.parse.parse_qs(source_code)
    print(info)

答案 3 :(得分:0)

这段代码确实很奇怪。您正在使用查询解析器来解析网页的内容。 因此,不应使用parse_qs,而应使用类似this的内容。