python中的编码问题

昨天写了第一个定向爬虫,然后爬了一些妹子的图片,然后今天想着爬部小说试试看,然后就暴露了一些问题。

就是编码以及转换的问题。

首先是找到目标网站,找准目标后,写好代码准备先爬一章试试看。

#-*-coding:utf8-*-
import re
import requests


url = 'http://www.biqiuge.com/book/4772/2940354.html'
# hea = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}
res = requests.get(url)
html = res.text
text_content = re.findall('&nbsp;&nbsp;&nbsp;&nbsp;(.*?)<br />',html,re.S)
print(text_content)

看着没什么问题,但是一运行,返回的确实一串乱码


这跟昨天不太一样啊,昨天能正常显示中文,然后我又试了试用昨天的方式把代码改了改。

#-*-coding:utf8-*-
import re
import requests


url = 'http://www.biqiuge.com/book/4772/2940354.html'
# hea = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}
res = requests.get(url)
html = res.content.decode('utf-8')
print(html)

这回直接运行 出错了,提示

Traceback (most recent call last):
  File "F:/PycharmProjects/third_project/1.py", line 9, in <module>
    html = res.content.decode('utf-8')

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 373: invalid start byte

明明昨天的代码可以显示中文的。

这是昨天的代码

#-*-coding:utf8-*-
import requests
import re

# get web source code
url1 = 'http://enrz.com/fhm/2016/11/13/67848.html'
r = requests.get(url1)
html = r.content.decode('utf-8')
print(html)

这是昨天的结果


同样是r.content.decode('utf-8')为什么一个能运行,而另一个却出错呢?这其中到底出了什么问题?哪个环节出错了呢?

于是开始了百度之旅,根据百度到的我从头开始捋一捋

首先,requests.get(url)返回的是一个response对象,response里有很多属性,比如,content,text,state_code,encoding,cookies,url,headers,raw等等,其中 content是bytes类型的,text是str类型的,而根据python的定义,python里的str是Unicode编码的,而bytes类型为utf-8编码的。而Unicode编码的str可以通过encode()方法编码成bytes类型、bytes类型的可以通过decode()解码成Unicode类型。其中encode()里面的参数为调用对象想要成为的编码类型,而decode()里的参数为调用对象本身的编码类型。

如以下例子:

s = '蟒蛇'
print(type(s))
s1 = s.encode('utf-8')
print(type(s1))
print(s1)
s2 = s1.decode('utf-8')
print(type(s2))
print(s2)

得到输出为


那么按道理来说只要我get的网页里面的内容是utf-8编码的,那么我应该可以直接通过 .text 属性或者 .content.decode('utf-8) 方式显示源代码里的中文啊,于是我想,会不会是我get的这个网页源代码里面的文字不是utf-8编码的?于是打开网页查看源代码:


可以看到,在网页源代码里是没有匹配到utf-8的字符的


没想到,里面的汉字使用的是'gbk'编码,据说现在大部分网址都是使用的utf-8编码了,没想到这个网站用的还是gbk编码,或许这就是编码出错的原因?因为当把网页换成百度的时候,无论用text还是.content.decode('utf-8)都是能显示中文的。问题的关键应该就在这里。另外找了好几个网站都ok。但是无论我怎么转换,先decode成Unicode再encode成gbk输出,还是乱码,实在是想不明白。

再捋一捋,首先网页从服务器上加载完,response给爬虫,服务器上肯定不会出错的,那就应该是爬虫这里出错了,在pycharm上运行的爬虫在接收到服务器的response后首先应该会用默认的编码方式(utf-8)对源码进行编码,然后再呈现给用户,那么问题应该出在这里,我后来在pacharm上的各种encode和decode都是在经过pycharm处理过后的‘源码’,所以翻过来覆过去无论我怎么编,怎么解,都是在乱码的基础上进行的。我暂时想不到解决办法。

折腾了一天,问题的根本还是没有解决,换了一个小说网站就好了,这只是表面解决了一波,但是也没白折腾,大概了解了python里的编码以及编码转换过程了。问题暂且搁置,慢慢琢磨。



内容概要:本文详细介绍了一个基于Python的电商用户行为分析与预测系统的设计与实现,涵盖项目背景、目标、模型架构、关键技术挑战及解决方案。系统通过数据采集、预处理、特征工程、用户画像构建、行为建模与预测、推荐与预警服务集成等模块,实现了精细化用户画像、个性化商品推荐、用户流失预测、数据驱动决策等功能。项目包含完整的前后端代码实现、数据库设计(MySQL)、API接口规范、GUI界面开发(Tkinter)以及系统部署与优化策略,支持实时数据流处理、模型热加载、高并发服务与安全合规治理。; 适合人群:具备一定Python编程基础,熟悉数据分析、机器学习及Web开发的技术人员,尤其是从事电商、金融科技、推荐系统等相关领域的研发人员、数据科学家和系统架构师;适合工作1-3年希望提升全栈能力的开发者。; 使用场景及目标:①用于电商平台的用户精细化运营,实现个性化推荐与精准营销;②支持用户流失预警与干预,提升用户留存与生命周期价值;③为零售、金融、社交等多行业提供可复用的用户行为分析框架;④作为教学或实训项目,帮助学习者掌握从数据采集到模型部署的全流程开发技能。; 阅读建议:建议结合文档中的代码示例与数据库设计,搭建本地开发环境进行实践操作,重点关注数据预处理、用户画像构建、推荐算法与流失预测模型的实现细节。同时,可扩展学习LSTM、协同过滤、逻辑回归等算法原理,并尝试引入深度学习模型优化系统性能。项目强调业务闭环与持续优化,建议在实践中结合A/B测试与监控机制验证效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值