爬取东方方财富网公告时,出现编码错误:
gbk’ codec can’t encode character ‘\ufffd’ in position 33986: illegal multibyte sequence
原因是gbk不能编码‘\ufffd’字符。
解决办法:删除文本中的‘\ufffd’字符。
原代码如下:
def mini_spider(url):
response=requests.get(url)#发送请求返回响应
print(type(response.text))
try:
text=response.text.encode(encoding='gbk')#把响应转化为文本
except Exception as e:
print(e)
return None
html=etree.HTML(text)#使用HTML解析文本
content=html.xpath('//div[@class="detail-body"]/div[1]/text()')[0]#抓取公告正文
mini_spider(url='http://data.eastmoney.com/notices/detail/688081/AN201910311370104736,JUU1JTg1JUI0JUU1JTlCJUJFJUU2JTk2JUIwJUU3JUE3JTkx.html')
运行结果如下:
'gbk' codec can't encode character '\ufffd' in position 33986: illegal multibyte sequence
修改之后的代码如下:
def mini_spider(url):
#解析行
response=requests.get(url)#发送请求返回响应
text=response.text.replace('\ufffd','')
try:
text=text.encode(encoding='gbk')#把响应转化为文本
except Exception as e:
print(e)
return None
html=etree.HTML(text)#使用HTML解析文本
content=html.xpath('//div[@class="detail-body"]/div[1]/text()')[0]#抓取公告正文
print(content)
mini_spider(url='http://data.eastmoney.com/notices/detail/688081/AN201910311370104736,JUU1JTg1JUI0JUU1JTlCJUJFJUU2JTk2JUIwJUU3JUE3JTkx.html')
参考文献
1、Python异常UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\ufffd’