Python+Requests安装及抓取网页源码中文乱码问题的解决

刚开始自学Python课程,学习到自制单线程小爬虫,利用pip install requests命令安装Python的Requests库(自备梯子,注意如果安装了不同Python版本的话记得先进入对应版本的pip目录)。Windows环境下cmd安装requests库
安装完后在IDE中就可以调用Requests了。

import requests

于是开始尝试自己的第一个小爬虫,借用Requests库可以很简单地抓取源码:

# -*- coding:utf-8 -*-
import requests
html=requests.get('自己的网站')
print html.text

但这样运行发现网页源码的中文部分全部乱码显示:

<ul>
    <li><a  href="UpLoadFile/2010719174647.jpg" rel="lightbox[1]" title="�����"><img src="UpLoadFile/2010719174647.jpg" width="97" height="86" alt="�����"><p>�����</p></a></li>
    <li><a  href="UpLoadFile/2010719191259.jpg" rel="lightbox[1]" title="�����"><img src="UpLoadFile/2010719191259.jpg" width="97" height="86" alt="�����"><p>�����</p></a></li>
    <li><a  href="UpLoadFile/201071919051.jpg" rel="lightbox[1]" title="�ְ屦����"><img src="UpLoadFile/201071919051.jpg" width="97" height="86" alt="�ְ屦����"><p>�ְ屦����</p></a></li>
    <li><a  href="UpLoadFile/2010719184616.jpg" rel="lightbox[1]" title="�����"><img src="UpLoadFile/2010719184616.jpg" width="97" height="86" alt="�����"><p>�����</p></a></li>
    <li><a  href="UpLoadFile/2010719183418.jpg" rel="lightbox[1]" title="ģ�ߵ���"><img src="UpLoadFile/2010719183418.jpg" width="97" height="86" alt="ģ�ߵ���"><p>ģ�ߵ���</p></a></li>
    <li><a  href="UpLoadFile/201071916438.jpg" rel="lightbox[1]" title="Բ������"><img src="UpLoadFile/201071916438.jpg" width="97" height="86" alt="Բ������"><p>Բ������</p></a></li>
</ul>

在网上查找解决方案,有发现如下几种方法:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')   #不推荐
import urllib2            #利用Python的urllib2库抓取网页
import sys
content = urllib2.urlopen("http://www.higis.cn").read()   #网站页面是utf-8编码的。
type = sys.getfilesystemencoding()   # 关键
print content.decode("UTF-8").encode(type)  # 关键
content.encode('GBK')

分析了几种解决方案,看来问题的关键是网页源码与默认的utf-8编码不一致导致。了解了这个解决起来就容易多了。可以发现要抓取的网页源码中显示编码为gb2312

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

所以我们要做的就是在代码中添加一句用于指定编码

html.encoding = 'gb2312'  

这样再次运行就能成功显示中文了:

<ul>
    <li><a  href="UpLoadFile/2010719174647.jpg" rel="lightbox[1]" title="碟形弹簧"><img src="UpLoadFile/2010719174647.jpg" width="97" height="86" alt="碟形弹簧"><p>碟形弹簧</p></a></li>
    <li><a  href="UpLoadFile/2010719191259.jpg" rel="lightbox[1]" title="波形弹簧"><img src="UpLoadFile/2010719191259.jpg" width="97" height="86" alt="波形弹簧"><p>波形弹簧</p></a></li>
    <li><a  href="UpLoadFile/201071919051.jpg" rel="lightbox[1]" title="钢板宝塔簧"><img src="UpLoadFile/201071919051.jpg" width="97" height="86" alt="钢板宝塔簧"><p>钢板宝塔簧</p></a></li>
    <li><a  href="UpLoadFile/2010719184616.jpg" rel="lightbox[1]" title="环形弹簧"><img src="UpLoadFile/2010719184616.jpg" width="97" height="86" alt="环形弹簧"><p>环形弹簧</p></a></li>
    <li><a  href="UpLoadFile/2010719183418.jpg" rel="lightbox[1]" title="模具弹簧"><img src="UpLoadFile/2010719183418.jpg" width="97" height="86" alt="模具弹簧"><p>模具弹簧</p></a></li>
    <li><a  href="UpLoadFile/201071916438.jpg" rel="lightbox[1]" title="圆柱弹簧"><img src="UpLoadFile/201071916438.jpg" width="97" height="86" alt="圆柱弹簧"><p>圆柱弹簧</p></a></li>
 </ul>

还有一点要说的是,可能有些网站会阻挡爬虫爬取,因此需要简单的伪装下Headers,如:

user_agent={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36'}
html=requests.get('http://www.baidu.com',headers=user_agent)

爬取完网页源码,接下来就可以利用正则表达式等筛选出我们想要的内容。
至此,本人第一篇博客文章到此完成,新手一枚,欢迎大家留言讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值