zoukankan      html  css  js  c++  java
  • python 爬虫 02-urllib+requests

    1. urllib.request模块

     

    1.1 版本

    python2 :urllib2、urllib

    python3 :把urllib和urllib2合并,urllib.request

     

    1.2 常用的方法

     

    • urllib.request.urlopen("URL")  作用 :向网站发起一个请求并获取响应
    • 字节流 = response.read()
    • 字符串 = response.read().decode("utf-8")
    • urllib.request.Request"URL",headers="User-Agent , Referer 之类")    # 其得到的对象是

        urlopen()不支持重构User-Agent    其中的request才可以用,一般套路都是  框架或模块 urllib.reauest.Request(url, data=none, headers={},origin_req_host=none, 

    unverifiable=False, method=None)

      • 第一个参数url用于请求URL,肯定是必传参数,其他都是可选
      • 第二个参数data如果要传,必须是bytes(字节流)类,如果它是字典可以先用

        urllib.parse模块里的urlencode()编码

      • 第三个参数headers是一个字典,它就是请求头,我们可在构造请求是通过headers参数直接构造,

        也可通过调用请求实例的add_header()方法

        添加请求头★最常用的用法是通过修改User-Agent来伪装浏览器,,默认的User-Agent是

        python-urllib,我们可以通过修改它来伪装浏览器。

        如要伪装火狐浏览器:

        Mozilla/5.0(X11;U; Linux i686) Gecko/20071127 Firefox/2.0.0.11

      • 第四个参数origin_req_host指的是请求方的host名称或IP地址
      • 第五个参数unverifiable表示这个请求是否无法验证,默认False,意思是说用户没有足够权限

        来接受这个请求的结果。

        如我们请求一个HTML文档中的图片,但是我们没自动抓取图像的权限,这是unverifiable的值

        就是True

      • 第六个参数method是一个字符串,用来致死请求使用的方法,如GET,POST,PUT

     

    1 import urllib.request
    2 
    3 request = urllib.request.Request('https://python.org')        
    4 response = urllib.request.urlopen(request)        #urlopen发送这个请求
    5                             #但是参数不再是URL
    6                             #而是一个Request的对象
    7 print(response.read().decode('utf-8'))

     

    1.3 响应对象

     

    • read()  读取服务器响应的内容
    • getcode() 返回HTTP的响应码    # 就是相应状态码 200,301,302,304,404
    • geturl()  返回实际数据的URL(防止重定向问题)  # 这里就是 先urlopen()之后的网站 调用其 geturl()看   其重定向

     

    2.  urllib.parse模块

     

    2.1 常用方法

     

    • urlencode(字典)  #将一些ASCII 不可以打印的字符给转化了,就是相当于搜索栏里面搜中文,&也会被转,空格也会,非法字符也会
    •  quote(字符串) (这个里面的参数是个字符串)

     

    from urllib import request,parse
    
    url = 'http://httpbin.org/post'
    headers = {
        'User-Agent':'自己的User-Agent',
        'Host':'httpbin.org'
    }
    dict = {
        'name':'Sun'
    }
    data = bytes(parse.urlencode(dict),encoding = 'utf8')
    req = request.Request(url = url,data = data,headers = headers,method = 'POST')
    reponse = request.urlopen(zeq)
    print(reponse.read().decaode('utf-8'))
    
    # 其中url请求URL
    # headers指定User-Agent和Host
    # 参数data用urlencode()和bytes()方法转成字节流
    # 请求方法是POST
    
    # 另外,headers也可以用add_header()方法添加!
    # req = request.Request(url=url, data=data, method='POST')
    # req.add.header('User-agent','添加的User-Agent')

    一些其他用法:

     1 #urllib.request模块里的BaseHandler类是所有其他Handler的父类
     2 #其提供了default_open()、protocol_request()
     3 
     4 
     5 #HTTPDefaultErrorHandler:用于处理HTTP响应错误,错误都会抛出HTTPError类型的异常
     6 #HTTPRedirectHandler:用于处理重定向
     7 #HTTPCookieProcessor:用于处理Cookies
     8 #ProxyHandler:用于设置代理,默认空
     9 #HTTPPasswordMgr:用于管理密码,它维护了用户名和密码的表
    10 #HTTPBasicAuthHandler:用于管理认证,如连接打开需认证,则可解决

    3. 请求方式

     

    • GET 特点 :查询参数在URL地址中显示
    • POST
      • 在Request方法中添加data参数 urllib.request.Request(url,data=data,headers=headers)
      • data :表单数据以bytes类型提交,不能是str

     

    4. requests模块

     

    4.1 安装

     

    • pip install requests
    • 在开发工具中安装

     

    4.2 request常用方法

     

    • requests.get(网址)

     

    4.3 响应对象response的方法

     

    • response.text 返回unicode格式的数据(str)
    • response.content 返回字节流数据(二进制)
    • response.content.decode('utf-8') 手动进行解码
    • response.url  返回url
    • response.encode() = 编码

     

    4.4 requests模块发送 POST请求

     

    4.5 requests设置代理

     

    • 使用requests添加代理只需要在请求方法中(get/post)传递proxies参数就可以了
    • 代理网站

     

    想看代理集合? 来这里!!!

    重要的就是找到免费代理网站然后存下来做成代理池 

     

    4.6 cookie

     

    cookie :通过在客户端记录的信息确定用户身份

     

    HTTP是一种无连接协议,客户端和服务器交互仅仅限于 请求/响应过程,结束后断开,下一次请求时,服务器会认为是一个新的客户端,为了维护他们之间的连接,让服务器知道这是前一个用户发起的请求,必须在一个地方保存客户端信息。

     

     

     

    4.7 session

     

    session :通过在服务端记录的信息确定用户身份 这里这个session就是一个指的是会话

      解释:相当于 我登录给了cookie,但是下次就没了,所以用一个会话存储它,让一个程序能继续访问该站点

     

     

    4.8 处理不信任的SSL证书

     

    什么是SSL证书?

    • SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能

     

     

    5. requests 模块源码分析

     

     

     

     

     
  • 相关阅读:
    python笔记之re模块学习
    python笔记之面向对象
    C# 静态类和非静态类(实例类)
    占位符的使用
    数据类型和数据类型转换
    win7 安装 memcached
    php 汉字转换成拼音
    apache window环境下本地配置虚拟主机
    在浏览器输入一个网址到得到页面的过程
    浅谈线程池ThreadPoolExecutor核心参数
  • 原文地址:https://www.cnblogs.com/sdosun/p/13292778.html
Copyright © 2011-2022 走看看