python中urllib与requests知识点记录

本文详细介绍了Python中urllib和requests模块的使用,包括urllib的基本方法如Request和response.read(),以及requests的入门及深入使用,如发送GET、POST请求,处理headers、参数和cookie。通过实例分析了两个模块在发送网络请求时的差异和应用场景,适合Python网络编程初学者参考。
摘要由CSDN通过智能技术生成

urllib与requests

一、urllib的学习

学习目标

了解urllib的基本使用


1、urllib介绍

除了requests模块可以发送请求之外, urllib模块也可以实现请求的发送,只是操作方法略有不同!

urllib在python中分为urllib和urllib2,在python3中为urllib

下面以python3的urllib为例进行讲解

2、urllib的基本方法介绍

2.1 urllib.Request
  1. 构造简单请求

    import urllib
    #构造请求
    request = urllib.request.Request("http://www.baidu.com")
    #发送请求获取响应
    response = urllib.request.urlopen(request)
  2. 传入headers参数

    import urllib
    #构造headers
    headers = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"} 
    #构造请求
    request = urllib.request.Request(url, headers = headers)
    #发送请求
    response = urllib.request.urlopen(request)
  3. 传入data参数 实现发送post请求(示例)

    import urllib.request
    import urllib.parse
    import json
    ​
    url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15',
    ​
    }
    data = {
        'cname': '',
        'pid': '',
        'keyword': '北京',
        'pageIndex': 1,
        'pageSize': 10,
    }
    # 使用post方式
    # 需要
    data = urllib.parse.urlencode(data).encode('utf-8')
    req = urllib.request.Request(url, data=data, headers=headers)
    res = urllib.request.urlopen(req)
    print(res.getcode())
    print(res.geturl())
    data = json.loads(res.read().decode('utf-8'))
    # print(data)
    for i in data['Table1']:
        print(i)
2.2 response.read()

获取响应的html字符串,bytes类型

#发送请求
response = urllib.request.urlopen("http://www.baidu.com")
#获取响应
response.read()

3、urllib请求百度首页的完整例子

import urllib
import json
​
url = 'http://www.baidu.com'
#构造headers
headers = {"User-Agent" : "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"}
#构造请求
request = urllib.request.Request(url, headers = headers)
#发送请求
response = urllib.request.urlopen(request)
#获取html字符串
html_str = response.read().decode('utf-8')
print(html_str)

4、小结

  1. urllib.request中实现了构造请求和发送请求的方法

  2. urllib.request.Request(url,headers,data)能够构造请求

  3. urllib.request.urlopen能够接受request请求或者url地址发送请求,获取响应

  4. response.read()能够实现获取响应中的bytes字符串

requests模块的入门使用

一、requests模块的入门使用

学习目标:
  1. 了解 requests模块的介绍

  2. 掌握 requests的基本使用

  3. 掌握 response常见的属性

  4. 掌握 requests.text和content的区别

  5. 掌握 解决网页的解码问题

  6. 掌握 requests模块发送带headers的请求

  7. 掌握 requests模块发送带参数的get请求


1、为什么要重点学习requests模块,而不是urllib

  • 企业中用的最多的就是requests

  • requests的底层实现就是urllib

  • requests在python2 和python3中通用,方法完全一样

  • requests简单易用

2、requests的作用与安装

作用:发送网络请求,返回响应数据

安装:pip install requests

3、requests模块发送简单的get请求、获取响应

需求:通过requests向百度首页发送请求,获取百度首页的数据

import requests
​
# 目标url
url = 'https://www.baidu.com'
​
# 向目标url发送get请求
response = requests.get(url)
​
# 打印响应内容
print(response.text)

response的常用属性:

  • response.text 响应体 str类型

  • response.encoding 从HTTP header中猜测的响应内容的编码方式

  • respones.content 响应体 bytes类型

  • response.status_code 响应状态码

  • response.request.headers 响应对应的请求头

  • response.headers 响应头

  • response.request.cookies 响应对应请求的cookie

  • response.cookies 响应的cookie(经过了set-cookie动作)

  • response.url 获取访问的url

  • response.json() 获取json数据 得到内容为字典 (如果接口响应体的格式是json格式时)

  • response.ok

    如果status_code小于200,response.ok返回True。

    如果status_code大于200,response.ok返回False。

思考:text是response的属性还是方法呢?

  • 一般来说名词,往往都是对象的属性,对应的动词是对象的方法

3.1 response.text 和response.content的区别
  • response.text

    • 类型:str

    • 解码类型: requests模块自动根据HTTP 头部对响应的编码作出有根据的推测,推测的文本编码

    • 如何修改编码方式:response.encoding="gbk/UTF-8"

  • response.content

    • 类型:bytes

    • 解码类型: 没有指定

    • 如何修改编码方式:response.content.deocde("utf8")

获取网页源码的通用方式:

  1. response.content.decode()

  2. response.content.decode("UTF-8")

  3. response.text

以上三种方法从前往后尝试,能够100%的解决所有网页解码的问题

所以:更推荐使用response.content.deocde()的方式获取响应的html页面

3.2 练习:把网络上的图片保存到本地

我们来把www.baidu.com的图片保存到本地

思考:

  • 以什么方式打开文件

  • 保存什么格式的内容

分析:

  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值