一、Cookie模拟登陆
一、什么是cookie、session
HTTP是一种无链接协议,客户端和服务器交互仅仅限于 请求/响应过程,结束后断开,下一次请求时,服务器会认为是一个新的客户端,为了维护他们之间的链接,让服务器知道这是前一个用户发起的请求,必须在一个地方保存客户端信息。
cookie :经过在客户端记录的信息肯定用户身份
session :经过在服务端记录的信息肯定用户身份
二、案例 :使用cookie模拟登录人人网
步骤:
一、经过抓包工具、F12获取到cookie(先登录1次网站)
二、正常发请求
url:http://www.renren.com/967469305/profilehtml
二、requests模块
一、get()使用场景
params: 查询参数,字典,不用编码,也不用拼接URL
一、没有查询参数
res = requests.get(url,headers=headers))
二、有查询参数: params={}
res = requests.get(url,params=params,headers=headers))
注 :params参数必须为字典,自动进行编码
二、响应对象res的属性
一、encoding : 响应字符编码,res.encoding="utf-8"
二、text : 字符串
三、content : 字节流
四、status_code : 响应码
五、url : 返回实际数据的URL
三、非结构化数据存储
html = res.content
with open("XXX","wb") as f:
f.write(html)
四、post(url,data=data,headers=headers)
一、data为Form表单数据,字典,不用编码,不用转码
二、示例 :有道翻译
# 此处data为form表单数据
res = requests.post(url,data=data,headers=headers)
res.encoding="utf-8"
html = res.textmysql
三、get()方法中不一样参数
一、代理IP(参数名:proxies)
一、获取代理IP的网站
西刺代理 www.xicidaili.com/
快代理 www.kuaidaili.com/
全网代理
二、普通代理
一、格式:proxies = {"协议":"协议://IP地址:端口号"}
182.88.190.3 8123
proxies = {"HTTP":"http://61.152.248.147:80"}
二、查看网络是否经过代理IP访问
http://httpbin.org/get :可以显示客户端的headers和IP
三、get设置链接超时时间:
timeout=3 --超时3秒
三、私密代理
格式:
proxies = {"http":"http://用户名:密码@IP地址:端口"}
ex:proxies = {"http":"http://309435365:szayclhp@123.206.119.108:21081"}
用户名 :309435365
密码 :szayclhp
IP地址 :116.255.162.107
端口号 :16816
四、案例1 :爬取链家二手房信息 --> 存到MySQL数据库
见 :05_链家tomysql.py
一、找URL
第1页:https://bj.lianjia.com/ershoufang/pg1/
第2页:https://bj.lianjia.com/ershoufang/pg2/
二、正则
<div class="houseInfo">.*?data-el="region">(.*?)</a>.*?<div class="totalPrice">.*?<span>(.*?)</span>
三、写代码
五、链家二手房案例(MongoDB数据库)
见 :06_链家tomongo.py
>>>show dbs
>>>use 库名
>>>show collections
>>>db.集合名.find().pretty()
>>>db.集合名.count()
二、Web客户端验证(参数名:auth=(元组))
一、auth = ("用户名","密码")
auth = ("tarenacode","code_2013")
ex:res = requests.get(url,proxies=self.proxies,headers=self.headers,auth=("tarenacode","code_2013"))
二、案例:爬取code.tarena目录
见 :07_Web客户端验证.py
一、步骤
一、URL:http://code.tarena.com.cn
二、正则
<a href=".*?">(.*?)</a>
三、代码
三、SSL证书认证(参数名:verify=True | False)
一、verify = True : 默认,进行SSL证书认证
二、verify = False: 不作认证web
四、urllib.request中Handler处理器
一、定义
自定义的urlopen()方法,由于模块自带的urlopen()方法是一个特殊的opener(模块已定义好),不支持代理等功能,经过Handler处理器对象来自定义urlopen对象
二、经常使用方法
一、opener=build_opener(某种功能Handler处理器对象) :建立opener对象
二、opener.open(url,参数)
三、使用流程
一、建立相关的Handler处理器对象
http_handler = urllib.request.HTTPHandler()
二、建立自定义opener对象
opener = urllib.request.build_opener(http_handler)
三、利用opener对象的open方法发送请求获响应
req = urllib.request.Request(url,headers=headers)
res = opener.open(req)
四、Handler处理器分类
一、HTTPHandler():没有任何特殊功能
二、ProxyHandler({普通代理})
代理: {"协议":"IP地址:端口号"}
三、ProxyBasicAuthHandler(密码管理器对象) :私密代理
四、HTTPBasicAuthHandler(密码管理器对象) :web客户端认证
五、密码管理器用途
一、私密代理
二、Web客户端认证
三、程序实现流程
一、建立密码管理器对象
pwdmg = urllib.request.HTTPPasswordMgrWithDefaultRealm()
二、把认证信息添加到密码管理器对象里面去
pwdmg.add_password(None,webserver,user,passwd)
webserver:为 私密代理的ip地址:端口号
user:帐户
passwd:密码
三、建立Handler处理器对象
一、私密代理
proxy_handler = urllib.request.ProxyAuthBasicHandler(pwdmg)
二、Web客户端
webbasic_handler = urllib.request.HTTPBasicAuthHandler(pwdmg)
四、建立自定义opener对象
opener = urllib.request.build_opener(proxy_handler)
五、利用opener对象的open方法发请求获响应
req = urllib.request.Request(url,headers=headers)
res = opener.open(req)sql