ProxyHandler处理器(代理设置)
作用:通过ProxyHandler来设置使用代理服务器来模拟人的登陆,防止服务器将webIP加入黑名单,可以在快代理,西刺免费代理中寻找代理IP
-
代理的原理:在请求目的服务器之前,先请求代理服务器,然后让代理 服务器请求目的网站,代理服务器拿到目的网站的数据后,再转发给我们代理。
-
http://httpbin.org:这个网站可以方便的查看http请求的一些参数,如当前webip
- 在代码中使用代理:
1.使用ProxyHandle 传入代理构建一个handler
2.使用上面创建的handler构建一个opener
3.使用opener去发生一个请求
没有使用代理的
from urllib import request
url1 = 'http://www.httpbin.org/ip'
resp = request.urlopen(url1)
print(resp.read())
使用代理的
from urllib import request
url1 = 'http://www.httpbin.org/ip'
# 1,使用ProxyHandle 传入代理构建一个handler
handler = request.ProxyHandler({"https":"163.204.240.177:9999"})
# 2.使用上面创建的handler构建一个opener
opener =request.build_opener(handler)
# 3.使用opener去发生一个请求
ressp = opener.open(url1)
print(ressp.read())
cookie
cookie用来解决http请求无状态的,且保存在本地。
cookie格式:
Set-Cookie:NAME=VALUE; Expires/Max-age=DATE; Path=PATH; Domain=DOMAIN; SECURE
参数意义:
- NAME:cookie的名字
- VALUE:cookie的值
- Expires:cookie的过期时间
- Path:cookie的作用路径
- Domain: cookie作用的域名
- SECURE: 是否只在https协议下起作用
使用cookielib库
1.人工登陆
没有使用cookie信息请求人人网:
from urllib import request
url = 'http://www.renren.com/xxxxxxxxx'
headers = {'User-Agent':'xxxxxxxxxxxxxxxx'}
req = request.Request(url=url,headers=headers)
resp = request.urlopen(req)
with open('renren.html','w')as f:
#write函数必须写入一个str的数据类型
#resp.read()读出来的是一个bytes数据
#bytes ->decode ->str
#str ->encode ->bytes
f.write(resp.read().decode('utf-8'))
使用cookie信息请求人人网
from urllib import request
url = 'http://www.renren.com/xxxxxxxxx'
headers = {'User-Agent':'xxxxxxxxxxxxxxxx','Cookie':,'xxxxxxxxx'}
req = request.Request(url=url,headers=headers)
resp = request.urlopen(req)
with open('renren.html','w',encoding='utf-8')as f:
#write函数必须写入一个str的数据类型
#resp.read()读出来的是一个bytes数据
#bytes ->decode ->str
#str ->encode ->bytes
f.write(resp.read().decode('utf-8'))
http.cookiejar模块
该模块主要的类有:
- 1.CookieJar
- 2.MozillaCookieJar
- 3.FileCookieJar
- 4.LWPCookieJar
---CookieJar:将cookie存储到内存当中
---FileCookieJar:将cookie存储在文件当中
---MozillaCookieJar:从FileCookieJar派生而来,将cookie存储在文件当中,创建与火狐浏览器Cookie.txt兼容的实例
---LWPCookieJar:从FileCookieJar派生而来,将cookie存储在文件当中,创建libwww-per标准的Set-Cookie3文件格式兼容的实例
2.自动登陆
from urllib import request
from urllib import parse
from http.cookiejar import CookieJar
headers = {'User-Agent':'xxxxxxxxxxxxxxxx'}
#1.登陆
#1.1创建一个cookiejar对象
cookiejar = CookieJar()
#1.2使用cookiejar创建一个HTTPCookieProcess对象
handler = request.HTTPCookieProcessor(cookiejar)
#1.3使用上一步创建的handler创建一个opener
opener = request.build_opener(handler)
#1.4使用opener发送登陆的请求(人人网的邮箱和密码)
url = 'http://www.renren.com/PLogin.do'
data = {'email':'xxxxxxxxxxxx','password':'xxxxxxxxxxx'}
req =request.Request(url,data=parse.urlencode(data).encode('utf-8'),handlers=handlers)
opener.open(req)
#访问主页
urls = 'http://www.renren.com/xxxxxxxxx'
#获取主页的页面的时候,不要再创建一个opener
#应该使用之前的opener,因为之前的opener已经包含了登陆的cookie信息
req = request.Request(url=urls,headers=headers)
resp = opener.open(urls)
with open('renren.html','w',encoding='utf-8')as f:
f.write(resp.read().decode('utf-8'))
保存cookie到本地
from urllib import request
from http.cookiejar import MozillaCookieJar
cookiejar = MozillaCookieJar('cookie.txt')
handler = request.HTTPCookieProcessor(cookiejar)
opener = request.build_opener(handler)
resp = opener.open('http://www.baidu.com') #已经将cookie信息存入到cookiejar中了
cookiejar.save() #传入ignore_discard=True,则会保存过期的cookie信息
读取本地的cookie信息
from urllib import request
from http.cookiejar import MozillaCookieJar
cookiejar = MozillaCookieJar('cookie.txt')
cookiejar.load(ignore_discard=True)#拿到本地的cookie信息到访问页面中 传入ignore_discard=True,则会保存过期的cookie信息
handler = request.HTTPCookieProcessor(cookiejar)
opener = request.build_opener(handler)
resp = opener.open('http://www.baidu.com') #已经将cookie信息存入到cookiejar中了