前言
最近正在学习Python网络爬虫的相关知识,所以想边学边与大家分享,鉴于本人Python水平有限,此前除了用pygame按照教程做过一些游戏之外对Python并无太深的理解,所以此文章的主要目的在于抛砖引玉,若文章中有什么错误与瑕疵,望大家可以指出,使我们共同进步。
正文
目前Python爬虫领域最流行的库是requests库,关于该库的更多信息可以在官方网站http://www.python-requests.org中获取。
若想使用requests库除了可以在官网或GitHub上下载之外,也可使用Python自带的pip安装功能,只用在cmd中输入如图所示的pip install requests,等待片刻即可。安装完成后可在Python的IDLE中使用import requests来验证是否安装成功。
requests库共有如下七个主要方法:
其中requests.request()方法是其它所有方法的基础,也可以说requests库只有request()这一种方法。
此次着重介绍其中的get()方法,get方法参数格式为request.get(url, params=None, **kwargs)其中url代表拟get的网页的url链接;params代表在url中增加的额外参数,可以是字典或字节流格式,这是可选参数;**kwargs代表的是另外12个可选的控制访问的参数(此次不进行深入讨论)。
get()方法要涉及requests库的两个重要对象——Request与Response。Request对象包含了向服务器请求的相关操作的信息;Response对象包含了爬虫从服务器所返回的全部信息,也包含了request向服务器请求的全部信息。我们以百度网页为例,使用requests.get()来抓取百度主页,r.status_code若显示为200则表示抓取成功,若显示为404或其他数字即为抓取失败。type将检测r的类型,我们可以看到该类名称为Response.
Response类含有以下的属性:
其中r.content常用来处理网页中如图片之类的二进制数据,r.encoding和r.apparent_encoding均是用于解析网页的编码方式,但分析方式不同,以下将重点讲解其中的不同:
我们可以看到用r.encoding解析出来的网页编码方式为"ISO-8859-1"用text打印出来的网页源码中有很多都是乱码,如果我们用r.apparent_encoding来解析会怎样呢?
r.encoding是通过HTTP中的charset字段来分析出编码方式的,若HTTP中无此字段,则r.encoding将返回默认的编码方式"ISO-8859-1",而"ISO-8859-1"编码方式不支持中文,所以r.text打印出的内容中中文将显示为乱码。r.apparent_encoding则是从网页的内容中分析出的网页编码方式,准确率相对较高,我们只用将r.apparent_encoding的值赋给r.encoding即可改变r.text的解码方式从而解析出中文。