windows下python爬虫编码格式报错解决方案

先说说我为何出现了这个问题,因为学完爬虫后想拿豆瓣电影Top250练练手,这个是参考的链接(http://blog.youkuaiyun.com/fighting_no1/article/details/50926008),该博客的代码几乎把豆瓣电影上的内容全解析了,于是我先保存代码到本地运行一下,结果是得到的excel文件不对,折腾了一天才知道是解析的网页中&nbsp这个特殊字符在进行转码时无法正确编码,

UnicodeEncodeError: 'gbk' codec can't encode character u'\xa0' in position

相信类似的问题大家都会遇到吧,要么是乱码,要么是直接这种类型的报错,其实归根究底是python字符编码和解码的问题,比如同样的python文件我在window下运行报上面的错误,ubuntu下就没事,都是这种编码解码原因。

先说下解决的办法,具体的原因可以参考这个篇博客,参考的原因解释链接,介绍的非常详细,我也不重复造轮子了就。

如果在window下运行,原因: 
对于Unicode字符,需要print出来的话,由于本地系统是Windows中的cmd,默认codepage是CP936,即GBK的编码,所以python解释器需要先将上述的Unicode字符编码为GBK,然后再在cmd中显示出来。但是由于该Unicode字符串中包含一些GBK中无法显示的字符,导致此时提示“’gbk’ codec can’t encode”的错误的。

解决方法1: 
在转换的时候必需进行一些前置动作

string.replace(u’\xa0’, u’ ‘)

将’\xa0‘替换成u’ ‘空格,这个\xa0就是那个html中的&nbps空格

解决方法2: 
在对unicode字符编码时,添加ignore参数,忽略无法无法编码的字符,这样就可以正常编码为GBK了

print 你的字符串.encode(“GBK“,’ignore‘);

### Python 爬虫常见报错及其解决方案 #### 一、网络请求类错误 当执行爬虫程序时,如果目标网站无法访问或连接超时,则会引发异常。对于这类问题,通常可以通过设置合理的重试机制来处理。 ```python import requests from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry session = requests.Session() retry_strategy = Retry( total=3, backoff_factor=1, status_forcelist=[500, 502, 503, 504] ) adapter = HTTPAdapter(max_retries=retry_strategy) session.mount("http://", adapter) session.mount("https://", adapter) response = session.get('http://example.com') ``` #### 二、编码解码错误 读写文件过程中可能会因为字符集不匹配而抛出`UnicodeDecodeError`等异常。确保打开文件时指定了正确的编码方式可有效预防此类情况发生[^3]。 ```python with open('%s.html' % title, 'w', encoding='utf-8') as f: pass ``` #### 三、解析HTML文档失败 利用第三方库如BeautifulSoup解析网页结构时,若页面布局发生变化可能导致原有XPath表达式失效。此时应重新审查并调整定位策略以适应新的DOM树形态。 #### 四、IP被封禁 频繁向同一服务器发起请求容易触发其防护措施从而造成IP地址暂时不可用。采用代理池轮询发送HTTP(S)请求能够显著降低单个公网出口的压力,提高成功率的同时也减少了对源站造成的负担[^2]。 ```python proxies = { "http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080", } requests.get("http://example.com", proxies=proxies) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值