urllib和urllib3

urllib和urllib3

urllib库

  • urllib 是一个用来处理网络请求的python标准库,它包含4个模块
    • urlib.requests:请求模块,用于发起网络请求
    • urlib.parse:解析模块,用于解析URL
    • urlib.error:异常处理模块,用于处理request引起的异常
    • urllib.robotparse:用于解析robots.txt文件

urlib.requests

  • request模块主要负责构造和发起网络请求,并在其中添加Headers,Proxy等。利用它可以模拟浏览器的请求发起过程
  • urlopen方法
    • urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
    • urlopen是一个简单发送网络请求的方法。它接收一个字符串格式的url,它会向传入的url发送网络请求,然后返回结果
    • urlopen默认会发送get请求,当传入data参数时,则会发起POST请求。data参数是字节类型、者类文件对象或可迭代对象
    • 还才可以设置超时,如果请求超过设置时间,则抛出异常。timeout没有指定则用系统默认设置,timeout只对,http,https以及ftp连接起作用。它以秒为单位,比如可以设置timeout=0.1 超时时间为0.1秒
  • Request对象
    • 请求头添加
      通过urllib发送的请求会有一个默认的Headers: “User-Agent”:“Python-urllib/3.6”,指明请求是由urllib发送的。所以遇到一些验证User-Agent的网站时,需要我们自定义Headers把自己伪装起来

    • 操作Cookie

    • 设置代理

  • Response对象的属性和方法
    urlib库中的类或或者方法,在发送网络请求后,都会返回一个urllib.response的对象。它包含了请求回来的数据结果
    • read():获取响应返回的数据,只能用一次
    • readline():读取一行
    • info():获取响应头信息
    • geturl():获取访问的url
    • getcode():返回状态码

urlib.parse

parse模块是一个工具模块,提供了需要对url处理的方法,用于解析url

  • parse.quote()
    • url中只能包含ascii字符,在实际操作过程中,get请求通过url传递的参数中会有大量的特殊字符,例如汉字,那么就需要进行url编码
  • parse.urlencode()
    • 发送请求的时候,往往会需要传递很多的参数,如果用字符串方法去拼接会比较麻烦,parse.urlencode()方法就是用来拼接url参数的

urlib.error

error模块主要负责处理异常,如果请求出现错误,我们可以用error模块进行处理主要包含URLError和HTTPError

  • URLError:是error异常模块的基类,由request模块产生的异常都可以用这个类来处理
  • HTTPError:是URLError的子类,主要包含三个属性
    • Code:请求的状态码
    • reason:错误的原因
    • headers:响应的报头

urllib.robotparse

  • robotparse模块主要负责处理爬虫协议文件,robots.txt.的解析
  • Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取
  • robots.txt文件是一个文本文件,使用任何一个常见的文本编辑器,比如Windows系统自带的Notepad,就可以创建和编辑它 。robots.txt是一个协议,而不是一个命令。robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt文件告诉spider程序在服务器上什么文件是可以被查看的

urlid3库

​ urllib3 是一个基于python3的功能强大,友好的http客户端。越来越多的python应用开始采用urllib3.它提供了很多python标准库里没有的重要功能

  • 简单使用

    import urllid3
    http = urllib3.PoolManager() #实例化对象构造请求
    
    #发送请求
    r = http.request('GET','http://desk.zol.com.cn/pc/,headers=header)
  • http响应提供以下属性

    • status(状态码)

    • headers(头文件)

    • data(网页的原始数据)

    • stream(32)(若返回的是字节数可获取字节的大小)

      • 使用时应在http.request中加上preload_content=Felse

        r = http.reqest('GET','http://httpbin.org/bytes/1024',preload_content=False)
        for chunk in r.stream(32):
            print(chunk)    
        #或者直接当成文件来处理
        for line in r:
            print(line)
  • http代理

    http = urllib3.PoolManager('http://xxx.xx.xxx.xx:65535') #在此设置指代理

urild3我不经常使用,以上未完,日后再补

Requests库

  • 发起请求
    Requests的请求不再像urllib一样需要去构造各种Request、opener和handler,使用Requests构造的方法,并在其中传入需要的参数即可
import requests
#使用GET进行请求
resp_get = requests.get('https://www.baidu.com')
#使用post进行请求,并将需要的数据传给data即可
resp_post = request.post('http://httpbin.org/post',data={'key':'value'})
  • 传递,查看URL

    传递URL参数也不用再像urllib中那样需要去拼接URL,而是简单的,构造一个字典,并在请求时将其传递给params参数

import requests
param = {'key1':'value1',
        'key2':'value2'}
#有时会遇到相同的URL参数名,但值不同,此时可如下书写
peee = {'key1':'value1',
       'key2':['value2','value3']}
resp_get = requests.get('https://httpbin.org/get',params=param)
print(resp_get.url) #直接 .url 即可查看当前请求下的url
  • 同样Requests可以使用以下参数

    • headers

    • 传入写好的头文件以键值对格式传入

    • cookies

      • 传入写好的cookies同样是键值对形式
    • 使用代理

      • 使用proxies传入代理同样为键值对形式
    • 重定向

      • 在网络请求中,我们常常会遇到状态码是3开头的重定向问题,在Requests中是默认开启允许重定向的,即遇到重定向时,会自动继续访问,我们可以重新设置

        resp = requests.get('http://xxxxx.com',allow_redirects=False)
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值