初始网络爬虫之三:网络爬虫最常用的requests库

来源:互联网 发布:淘宝网雪纺女装 编辑:程序博客网 时间:2024/05/22 10:43
#coding:utf8#python中用第三方库requests实现HTTP请求,是python中最常见的。#一:请求与响应模型#GET请求import requestsr = requests.get('https://www.baidu.com/')print r.content#POST请求import requestspostdata = {'username' : '黑暗骑仕win',            'password' : ''}r = requests.post('https://www.baidu.com/',data=postdata)print r.content#请求复杂网址,如:http://zzk.cnblogs.com/s/blogpost?Keywords=blog:qiyeboy&pageindex=1import requestspayload = {'Keywords': 'blog:qiyeboy','pageindex':1}r = requests.get('http://zzk.cnblogs.com/s/blogpost', params=payload)print r.url#打印出:http://zzk.cnblogs.com/s/blogpost?Keywords=blog:qiyeboy&pageindex=1#二:响应与编码import requestsr = requests.get('https://www.baidu.com/')print 'content-->'+r.contentprint 'text-->'+r.textprint 'encoding-->'+r.encodingr.encoding='utf-8'print 'new text-->'+r.text#chardet是一个非常优秀的字符串/文件编码检测模块pip install chardetimport requestsimport chardetr = requests.get('https://www.baidu.com/')print chardet.detect(r.content) #chardet.detect()返回字典#直接将chardet探测到的编码,赋值给r.encoding实现解码,r.text输出就不会乱码r.encoding = chardet.detect(r.content)['encoding']print r.text#流模式获取响应import requestsr = requests.get('https://www.baidu.com/',stream=True) #设置stream=Ture标志位,使响应以字节流方式进行读取print r.raw.read(10) #r.raw.read函数指定读取的字节数#三:请求头headers处理#与urllib2相似,在get函数中添加headers参数即可import requestsuser_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'headers={'User-Agent':user_agent}r = requests.get('https://www.baidu.com/',headers=headers)print r.content#四:响应码code和响应头headers处理#status_code获取响应码      headers获取相应头import requestsr = requests.get('https://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.headers['content-type'] #不推荐使用这种获取方式else:    r.raise_for_status()#五:Cookie处理#在响应中包含Cookie值时,获取Cookie字段值import requestsuser_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'headers = {'User-Agent':user_agent}r = requests.get('https://www.baidu.com/',headers=headers)#遍历出所有的cookie字段的值for cookie in r.cookies.keys():    print cookie+':'+r.cookies.get(cookie)#自定义Cookie值发送出去import requestsuser_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'headers = {'User-Agent':user_agent}cookies = dict(name='qiye',age='10')r = requests.get('https://www.baidu.com/',headers=headers,cookies=cookies)print r.text#Requeste中的session,可以像浏览器那样,每次访问的时候,程序自动把Cookie值带上import requestsloginUrl = 'http://tieba.baidu.com/'s = requests.Session()#首先访问登陆界面,作为游客,服务器会先分配一个cookier = s.get(loginUrl,allow_redirects=True)datas={'name':'黑暗骑仕win','passwd':''}#向登陆链接发送post请求,验证成功,游客权限转为会员权限r = s.post(loginUrl, data=datas,allow_redirects=True)print r.text#六:重定向与历史消息#allow_redirects字段设置重定向#如:r=requests.get('http://www.baidu.com',allow_redirects=True)#allow_redirects=True允许重定向;allow_redirects=False禁止重定向#若允许重定向,则通过r.history字段可查看历史信息,即访问成功之前的所有请求跳转信息import requestsr = requests.get('https://www.baidu.com')print r.urlprint r.status_codeprint r.history#七:超时设置:使用参数timeoutrequests.get('https"//www.baidu.com', timeout=0.1)#八:Proxy代理设置#可以为任意请求方法通过设置proxies参数来配置单个请求import requestsproxies = {    "http":"http://127.0.0.1:3128",    "https":"http://127.0.0.1:1080",}requests.get("http://example.org", proxies=proxies)#也可以通过环境变量HTTP_PROXY和HTTPS_PROXY来配置代理,但爬虫不常用#代理需要使用HTTP Basic Auth ,可以使用http://user:password@host/语法:proxies = {    "http":"http://user:pass@127.0.0.1:3128/",}