Requests实现是比较人性化的,也是最常用的方式。操作更加简单,更加人性化。
Requests库是第三方模块,需要额外进行安装。可以取GitHub上下载源码,下载地址是:http://github.com/kennethreitz/requests/releases。将源码压缩包解压缩,然后进入解压缩后的文件夹,运行setup.py即可。验证安装是否成功的方法是在python中输入import requests,若不报错,即为安装成功。
1.首先实现一个完整的请求与响应模型。
GET请求
import requests
r=requests.get('http://www.baidu.com')
print(r.content) #输出字节信息
POST请求
import requests
postdata={'key':'value'}#(在某个登陆页面需要输入用户名,密码)
r=requests.post('http://www.xxxx.com/login',data=postdata)
print(r.content)
HTTP中其他请求也可以用Requests实现
r=requests.put('http://www.xxxx.com/put',data={'key':'value'})
r=requests.delete('http://www.xxxx.com/delete')
r=requests.get('http://www.xxxx.com/get')
r=requests.head('http://www.xxxx.com/get')
r=requests.options('http://www.xxxx.com/get')
2.响应与编码
直接获取网页编码并赋给r.encoding
chardet检测字符串/文件编码模块,chardet.detect()返回字典
import requests
r=requests.get('http://www.baidu.com')
r.encoding=chardet.detect(r.content)['encoding']
print r.text #这样输出的文本不会有乱码
3.请求头headers处理
在get函数中添加headers参数即可。
import requests
user_agent='Mozilla/4.0 (compatible; MSIE5.5; Windows NT)'
headers={'User-agent':user_agent}
r=requests.get('http://www.baidu.com',headers=headers)
print(r.content)
4.响应码code和响应头headers处理
获取响应码使用Requests中的status_code字段,获取响应头使用Requests中的headers字段.
import requests
r=requests.get('http://www.baidu.com')
if r.status_code == requests.codes.ok:
print r.status_code #响应码
print r.headers #响应头
print r.headers.get('content-type') # 推荐
print r.header['content-type'] #不推荐
当headers中没有响应字段时,第一种返回None;第二种会抛出异常。
5.Cookie处理
如果响应中包含Cookie的值,可以用如下方式获取Cookie字段的值
import requests
user_agent='Mozilla/4.0 (compatible; MSIE5.5; Windows NT)'
headers={'User-agent':user_agent}
cookies = dict(name='qiye', age='10')
r=requests.get('http://www.baidu.com',headers=headers,cookies=cookies)
print(r.text)
还有一种更加高级,且能自动处理Cookie的方式,有时候我们并不关心Cookie的值是多少,只是希望每次访问的时候自动把Cookie的值带上,向浏览器一样。Requests提供了一个session的概念,在连续访问网页,处理登陆跳转时特别方便,不需要关注具体细节。
import Requests
loginUrl = 'http://www.xxxx.com/login'
s=requests.Session()
#首先访问登陆界面,作为游客,服务器会先分配一个cookie
r=s.get(loginUrl, allow_redirects=True)
datas = {'name':'qiye','passwd':'qiye'}
#向登陆链接发送post请求,验证成功,游客权限转为会员权限
r=s.post(loginUrl,data=datas, allow_redirects=True)
print r.text
这种使用Session函数处理Cookie的方法今后会很常用。
6.重定向与历史信息
处理重定向只是需要设置一下allow_redirects字段即可,设置为True, 即允许重定向;设置为False,则是禁止重定向。如果运行重定向可以通过r.history字段查看历史信息,即访问成功之前的所有请求跳转信息。
7.超时处理
超时选项时通过timeout来进行设置的
requests.get('http://github.com',timeout=2)
8. 代理设置
import Requests
proxies = {
"http": "http://0.10.1.10:3128"
"http": "http://10.10.1.10:1080"
}
requests.get('http://example.org',proxies=proxies)
请求得到URL文本后如何对网页进行解析,则是python爬虫开发中非常关键的一步。HTML中网页解析提取方式有多种,分别为Firebug工具,正则表达式和Beautiful soup。本文主要介绍Beautiful soup。欲知解析大法,且看下回分解。