Python爬虫学习一——requests库
Python爬虫学习一——requests库
- Python爬虫学习一requests库
- 安装requests库
- requests库常用方法简介
- 1 get方法
- robots协议
requests库是用来获取网页内容的python库,具有小巧灵活的特点,适合于python爬虫的学习。
1 安装requests库
一般来说,anaconda已经安装了requests库(anaconda安装参见Python-opencv环境配置),可以在anaconda中检查是否安装:打开anaconda,选择environment,输入requests,可以看到是否安装。

确认已经安装,就可以测试一下,打开Spyder,在命令行中输入:
import requests
我们测试是否能连接百度:
r = requests.get("https://www.baidu.com")
通过返回码判断是否获取成功:
print r.status_code
>>> 200
返回值是200,说明获取正确(只要返回值不是200,基本上获取是失败的)
也可以打印获取的内容:
print r.text
输出太多,我就不贴了。
2 requests库常用方法简介
requests库有7种主要方法,分别是:
| 名称 | 方法 |
|---|---|
| requests.request() | 其他方法的基础方法 |
| requests.get() | 获取HTML网页的主要方法,对应于HTTP的GET |
| requests.head() | 获HTML取网页信息头的方法 |
| requests.post() | 向HTML网页POST请求的方法 |
| requests.put() | 向HTML网页提交PUT请求的方法 |
| requests.patch() | 向HTML提交局部修改的请求的方法 |
| requests.delete() | 向HTML页面提交删除请求 |
requests库中最常用的是get()方法。
2.1 get方法
原函数:requests.get(url, params=None, **kwargs)
url表示网页地址,params表示url中的额外参数,kwargs表示12个访问控制的参数。
get方法返回一个Respond对象,主要有以下属性:

需要注意的是,encoding是根据网页内容中的charset关键字设置的,如果不存在,会设置一个默认值,apparent_encoding是根据网页内容推断出的编码,具有较高的准确性。因此encoding和apparent_encoding有时候不一样。如果打印出来的返回信息带有一定乱码,就需要设置Respond对象的encoding方式,一般来说,设置成utf-8编码就能正确显示了:
r.encoding = 'utf-8'
再次打印就可以看到中文字符了。
另外,还可以使用
r.encoding = r.apparent_encoding
来设置返回内容的编码。
requests库也会出现异常,主要有:

通过异常可以判断出现了何种错误,并不一定所有的异常都是代码引起的,也有可能是网络原因。
使用get方法可以编写网页获取的框架:
def getHTMLText(url):
try:
headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
r = requests.get(url, headers = headers)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
try…except的使用可以避免错误导致程序中断,保证程序的继续运行。
robots协议
例子中定义了一个长长的headers,目的是使爬虫模拟浏览器获取网页内容。爬虫的应用并不是完全无害的,主要会带来三个问题:一是对服务器的性能骚扰;二是爬取有产权归属内容并牟利带来的法律风险;三是爬虫可能突破简单访问控制,获取隐私信息导致信息泄露。一般来说,网站会通过来源审查和robots协议来限制爬虫使用,来源审查比较严格,服务器会只响应浏览器和友好爬虫的请求,拒绝其他请求;robots协议是一个公告,告知爬虫的爬取策略,要求爬虫遵守。robots协议在网站的根目录下,如京东的robots协议地址就是http://www.jd.com/robots.txt ,robots协议中,*表示所有,/表示根目录。爬取网站之前,一定要看一下robots协议,尽可能的遵守协议。
