python 中 'str' object has no attribute 'content' 的报错解决

编程知识 更新时间:2023-04-05 06:44:39
  1. 保存要爬的网页,代码如下:
# method1
response = urlopen(url).read().decode('utf-8') #用utf-8解析
soup = BeautifulSoup(response, 'lxml')
print(soup.prettify())

# method2, 更推荐
response = requests.get(url)
soup = BeautifulSoup(response.content.decode('utf-8'),'lxml')
print(soup.prettify())

file_obj = open('chengdu_douban.html', 'w', encoding="utf-8")  # 以写模式打开名叫 douban.html的文件,指定编码为utf-8
file_obj.write(response.content.decode('utf-8'))  # 把响应的html内容存入
file_obj.close()  # 关闭文件,结束写入;

报错: ‘str’ object has no attribute ‘content’

Debug:用第一种方法urlopen的时候,respose已经decode了,不需要再decode。所以运行完method1之后,直接保存网页的话,就会报错。
file_obj.write(response.content.decode(‘utf-8’)) 可以改为 file_obj.write(response)
如果是运行完method2,这时response还没有decode,这时保存网页就没问题。

  1. 打开保存的网页的时候:
file_obj = open('chengdu_douban.html', 'r')  # 以读方式打开文件名为douban.html的文件
html = file_obj.read()  # 把文件的内容全部读取出来并赋值给html变量
file_obj.close()  # 关闭文件对象

soup = BeautifulSoup(html, 'lxml')  # 初始化BeautifulSoup

print(soup.prettify())

报错:‘gbk’ codec can’t decode byte 0xae in position 345: illegal multibyte sequence

Debug:在打开的时候也要注意编码方式,加上encoding

改为:

file_obj = open('chengdu_douban.html', 'r',encoding="utf-8")  # 以读方式打开文件名为douban.html的文件
html = file_obj.read()  # 把文件的内容全部读取出来并赋值给html变量
file_obj.close()  # 关闭文件对象

soup = BeautifulSoup(html, 'lxml')  # 初始化BeautifulSoup

print(soup.prettify())

无报错。

注意:
decode的时候:看网页的编码是什么,就用什么解码,在meta标签可以看
编码是什么:GBK包含全部中文字符;UTF-8则包含全世界所有国家需要用到的字符。

更多推荐

python 中 'str' object has no attribute 'content' 的报错解决

本文发布于:2023-04-05 06:44:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/e00e9c258af5cf0cc4683645cd7eea21.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:报错   str   python   object   content

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 45350文章数
  • 14阅读数
  • 0评论数