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