python爬虫遇字符识别失败问题
就是我想将爬到的数据p.text写入文件中,它报错 了
import requests
from bs4 import BeautifulSoup
import io
import sys
import urllib.request
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8') #改变标准输出的默认编码
# -------------------------------------------------------------历届中国女子排球联赛获奖名单-----------------------------------------------------------------------------------
#UA伪装
headers={"user-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) A" "ppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
}
#1.指定爬虫网页网址
url="http://www.volleychina.org/hv/2023-01-19/doc-imyaterk5587468.shtml"
# 2.对URL发起请求
requests.get(url=url,headers=headers)
# 3.获取响应数据
response = requests.get(url=url,headers=headers)
page_txt = response.content.decode('utf-8')
# page_txt.encoding='utf_8'
# 4数据解析
#通过BeautifulSoup解析数据
#① 实例化BeautifulSoup对象,将页面数据加载至对象,Fe_Re_soup为女性获奖对象
Fe_Re_soup=BeautifulSoup(page_txt,'lxml')
#② 解析url标签属性等
#将div标签下所有的p标签提取
p_list=Fe_Re_soup.select('.detail-context>p')
#提取所有p标签下span标签里的内容,注p类型为bs4.element.Tag
f=open('女排球员获奖数据.txt','w+')
for p in p_list:
print(type (p.text))
f.write(p.text)
print('over')
# 5.存储数据
“Devil组”引证GPT后的撰写:
这个错误是由于文件写入时使用的默认编码为 'gbk',而 p.text 中含有无法被 'gbk' 编码的字符。可以将文件的编码格式改为 'utf-8',这样就可以处理中文和其他特殊字符。在打开文件时,指定 'utf-8' 编码格式即可:
f = open('女排球员获奖数据.txt', 'w+', encoding='utf-8')
这样就可以正常将 p.text 内容写入文件了。同时,也不需要在代码中添加 sys.stdout 和 io 模块的编码转换语句,因为这些操作只影响标准输出流的编码,而不影响文件输出流的编码。
因为拿到文件内容后已经是utf8格式的数据了,所以写入到文件的时候要和原始数据保持一致:
f=open('女排球员获奖数据.txt','w+', encoding='utf-8')
有帮助的话,请点采纳该答案~