ProxyHandler & Cookie by PYTHON

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中了

你可能感兴趣的:(ProxyHandler & Cookie by PYTHON)