urllib库笔记02

  • ProxyHandler处理器(代理设置)
    很多网站会检测某一段时间某个IP的访问次数(通过流量统计,系统日志等),如果访问次数多的不像正常人,它会禁止这个IP访问。我们可以设置一些代理服务器,每隔一段时间换一个代理,就算IP被禁止,依然可以换个IP进行爬取。通过ProxyHandler设置使用代理服务器。
    例:使用自定义opener使用代理
    http://httpbin.org :这个网站可以方便的查看http请求的一些参数
   from urllib import request
   # 没有使用代理
   # resp = request.urlopen("http://httpbin.org/get")
   # print(resp.read().decode("utf-8"))

   # 使用代理
   # 1.使用ProxyHandler,传入代理,构建一个handler
   handler = request.ProxyHandler({"http":"218.66.161.88:31769"})
   # 2.使用上面创建的handler构建一个opener 
   opener = request.build_opener(handler)
   req = request.Request("http://httpbin.org/ip")
   # 3.使用opener去发送请求
   resp = opener.open(req)
   print(resp.read())

常用代理

  1. 西刺免费代理ip:http://www.xicidaili.com/
  2. 快代理:http://www.kuaidaili.com/
  3. 代理云:http://www.dailiyun.com/
  • cookie
    http请求是无状态的,第一次和服务器连接并且登录成功后,第二次请求服务器不能知道当前请求是哪个用户。cookie出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,浏览器保存在本地,当用户发送第二次请求的时候,就会自动把上次请求存储的cookie数据自动携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个。cookie存储的数据量有限,不同浏览器有不同的存储大小,但一般不超过4KB。因此,使用cookie可以存储一些小量的数据。
  • 使用cookielib库和HttpCookieProcessor模拟登录
    • 使用浏览器访问,将cookie信息赋值下来,放到headers中
       from urllib import request
     # url为一个需要登录访问的网页
     url = ""
     headers = {
     'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64)  AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
     "Cookie":""
     }
     req = request.Request(url=url, headers=headers)
     resp = request.urlopen(req)
     print(resp.read().decode('utf-8'))
    
  • http.cookiejar模块
    主要的类有CookieJar,FileCookieJar,MozillaCookie.jar,LWPCookieJar。
    • CookieJar: 管理HTTP cookie值,存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进新房垃圾回收后cookie也将丢失。
    • FileCookieJar(filename,delayload=None,policy=None):从CookieJar派生而来,用来创建FileCookieJar实例,检索cookie信息并将cookie存储到文件中。filename存储cookie的文件名。delayload为True时支持延迟访问文件,即只有在需要时才读取文件或在文件中存储数据。
    • MozillaCookieJar(filename,delayload=None,police=None):从FileCookieJar派生而来,创建与Mozilla浏览器cookies.txt兼容的FileCookieJar实例。
    • LWPCookieJar(filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与libwww-per标准的Set-Cookie3文件格式兼容的FileCookieJar实例。
      利用http.cookiejarrequest.HTTPCookieProcessor登录人人网。相关示例代码如下:
from urllib import request
from http.cookiejar import CookieJar
from urllib import parse

headers = {
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"}

def get_opener():
    # 1. 登录
    # 1.1 创建一个cookiejar对象
    cookiejar = CookieJar()
    # 1.2 使用cookiejar创建一个HTTpCookieProcess对象
    handler = request.HTTPCookieProcessor(cookiejar)
    # 1.3 使用上一步骤创建的handler创建一个opener
    opener = request.build_opener(handler)
    return opener

def login(opener):
    # 1.4 使用opener发送登录的请求(账号密码)
    data = {
        'email': "",
        'password': ""
    }
    login_url = ""
    req = request.Request(login_url, data=parse.urlencode(data).encode('utf-8'), headers=headers)
    opener.open(req)

def visit_profile(opener):
    # 2. 访问个人主页
    url = ""
    # 获取个人主页的页面的时候,不要新建一个opener,而应该使用之前的opener,因为之前的opener已经包含了登录需要的信息
    req = request.Request(url, headers=headers)
    resp = opener.open(req)
    print(resp.read())
posted @ 2019-07-13 11:05  Atomyzd  阅读(81)  评论(0编辑  收藏  举报