我正在开发一个新项目,但我无法解决标题中的错误。
以下是代码:
#!/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')
答案 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的内容。