Spider(三)

一、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

相关文章
相关标签/搜索