100天精通Python(爬虫篇)——第44天:requests库大总结

在这里插入图片描述

文章目录

  • 每篇前言
  • 一、request模块大总结
    • 1. 下载安装
    • 2. 常用属性或方法
    • 3. response.text和response.content的区别:
    • 4. 发送带headers参数请求
    • 5. 发送带参数请求
    • 6. 在headers参数中携带cookie
    • 7. 超时参数timeout的使用
    • 8. proxies代理参数的使用
    • 9. 发送post请求

每篇前言

  • 作者介绍:Python领域优质创作者、华为云享专家、阿里云专家博主、2021年CSDN博客新星Top6

  • 本文已收录于Python全栈系列专栏:《100天精通Python从入门到就业》
  • ​​此专栏文章是专门针对Python零基础小白所准备的一套完整教学,从0到100的不断进阶深入的学习,各知识点环环相扣
  • 订阅专栏后续可以阅读Python从入门到就业100篇文章还可私聊进两百人Python全栈交流群(手把手教学,问题解答); 进群可领取80GPython全栈教程视频 + 300本计算机书籍:基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
  • 加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!

在这里插入图片描述
在这里插入图片描述

一、request模块大总结

本文主要学习requests这个http模块,该模块主要用于发送请求获取响应,该模块有很多的替代模块,比如说urlib模块, 但是在工作中用的最多的还是requests模块,requests的代码简洁 易懂,相对于臃肿的urlib模块,使用requests编写的爬虫代码将会更少, 而且实现某-功能将会简单。因此建议大家掌握该模块的使用

1. 下载安装

1. window电脑点击win键+ R,输入:cmd

在这里插入图片描述

2. 安装requests,输入对应的pip命令pip install requests,我已经安装过了出现版本就安装成功了

100天精通Python(爬虫篇)——第44天:requests库大总结_第1张图片

2. 常用属性或方法

方法/属性 说明
response = requests.get(url) 发送请求获取的响应对象(最常用)
response = requests.post(url) 发送请求获取的响应对象
response.url 响应的url;有时候响应的ur1和请求的urI并不一致
response.status_ code 响应状态码,如:200,404
response.request.headers 响应对应的请求头
response. headers 响应头
response.request.cookies 响应对应请求的cookie; 返回cookieJar类型
response.cookies 响应的cookie (经过了set- cookie动作; 返回cookieJar类型)
response.json() 自动将json字符串类型的响应内容转换为python对象 (dict or list)
response.text 返回响应的内容,str类型
response.content 返回响应的内容, bytes类型

简单代码实现:通过requests向百度首页发送请求,获取该页面的源码

import requests

# 目标网址
url = "http://www.baidu.com/"

# 发送请求获取响应
response = requests.get(url)

# 查看响应对象的类型
print(type(response))
# 查看响应状态码
print(response.status_code)
# 查看响应内容的类型
print(type(response.text))
# 查看cookies
print(response.cookies)
# 查看响应的内容
print(response.text)

输出结果:

<class 'requests.models.Response'>
200
<class 'str'>
<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>ç™¾åº¦ä¸€ä¸‹ï¼Œä½ å°±çŸ¥é“</title></head> <body link=#0000cc> 

3. response.text和response.content的区别:

response.text

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

response.content

  • 类型:bytes
  • 解码类型:没有指定,执行挑选

通过对response.content进行decode,来解决中文乱码

  • response.content.decode():默认utf-8
  • response.content.decode('GBK')

常见的编码字符集

  • utf-8
  • gbk
  • gb2312
  • asci (读音:阿斯克码)
  • iso-8859-1

代码演示:

import requests

# 目标网址
url = "http://www.baidu.com/"

# 发送请求获取响应
response = requests.get(url)

# 手动设置编码格式
response.encoding = 'utf8'
# 打印源码的str类型数据
print(response.text)

# response.content是存储的bytes类型的响应数据,进行decode操作
print(response.content.decode('utf-8'))

运行结果:

<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> 

关于百度 About Baidu

©2017 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

<!DOCTYPE html> <!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc>

关于百度 About Baidu

©2017 Baidu 使用百度前必读  意见反馈 京ICP证030173号 

4. 发送带headers参数请求

1)查看浏览器请求头

  • 1. 打开谷歌浏览器 》右键检查 》点击左上角刷新网页
    100天精通Python(爬虫篇)——第44天:requests库大总结_第2张图片
  • 2. 点击Network 》找到对应的网址 》往下翻找到User-Agent并复制
    100天精通Python(爬虫篇)——第44天:requests库大总结_第3张图片

2)代码说明

requests.get(ur1, headers=headers)
  • headers参 数接收字典形式的请求头
  • 请求头字段名作为key,字段对应的值作为value

3)代码实现

import requests

# 目标网址
url = "http://www.baidu.com/"

# 构建请求头字典,最重要的就是User-Agent
# 如果需要其他请求头,就在headers字典中加上
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}

# 发送请求获取响应
response = requests.get(url,headers=headers)

print(response.text)

运行结果:整个网页源码:

100天精通Python(爬虫篇)——第44天:requests库大总结_第4张图片

5. 发送带参数请求

如何删除网页地址中多余参数?

  • 百度搜:python,可以看到url地址特别复杂
    100天精通Python(爬虫篇)——第44天:requests库大总结_第5张图片
  • 通过一个一个删除参数并刷新,最终得到
    100天精通Python(爬虫篇)——第44天:requests库大总结_第6张图片

第一种方法:网址中带参数

import requests

# 目标网址
url = "https://www.baidu.com/s?wd=python"

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

# 发送请求获取响应
response = requests.get(url,headers=headers)

print(response.text)

第二种方式:通过params构造参数字典

import requests

# 目标网址
url = "https://www.baidu.com/s?"

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

# 请求参数是一个字典
kw = {'wd': 'python'}

# 发送请求的时候设置参数字典,获取响应
response = requests.get(url, headers=headers, params=kw)

print(response.text)

6. 在headers参数中携带cookie

网站经常利用请求头中的Cookie字段来做用户访问状态的保持,那么我们可以在headers参数中添加Cookie,模拟普通用户的请求。Cookie具有时效性过一段时间需要更换

  • 1. 打开谷歌浏览器 》右键检查 》点击左上角刷新网页
    100天精通Python(爬虫篇)——第44天:requests库大总结_第7张图片

  • 2. 点击Network 》找到对应的网址 》往下翻找到Cookie并复制
    100天精通Python(爬虫篇)——第44天:requests库大总结_第8张图片

  • 3. 在headers字典中添加cookie参数

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
        'Cookie': 'BAIDUID=157D064FDE25DE5DD0E68AF62CBC3627:FG=1; BAIDUID_BFESS=157D064FDE25DE5DD0E68AF62CBC3627:FG=1; BIDUPSID=157D064FDE25DE5DD0E68AF62CBC3627; PSTM=1655611179; BD_UPN=12314753; ZFY=Cs:BflL5Del98YBOjx2EyRPzQE3QCyolFKzgVTguBEHI:C; BD_HOME=1; H_PS_PSSID=36548_36626_36673_36454_31254_36452_36690_36165_36693_36696_36569_36657_26350_36469; BA_HECTOR=85850gag05ak0l040h1hbg5st14; delPer=0; BD_CK_SAM=1; PSINO=7; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_645EC=0e08fXgvc5rDJVK1jRjlqmZ7pLp5r%2Fmn9jlENTs3CQ4%2FbhzUL09Y%2F%2FYtCGA; baikeVisitId=e10d7983-547d-4f34-a8d8-ec98dbcba8e4; COOKIE_SESSION=115_0_2_2_1_2_1_0_2_1_0_0_0_0_0_0_1655611189_0_1656233437%7C3%230_0_1656233437%7C1'
    }
    

7. 超时参数timeout的使用

在平时网.上冲浪的过程中,我们经常会遇到网络波动,这个时候,一个请求等了很久可能任然没有结果。在爬虫中,一个请求很久没有结果,就会让整个项目的效率变得非常低,这个时候我们就需要对请求进行强制要求,让他必须在特定的时间内返回结果,否则就报错。

1.超时参数timeout的使用方法

response = requests.get(ur1, timeout=3)

2. timeout=3 表示:发送请求后,3秒钟内返回响应,否则就抛出异常

3. 实战代码:

import requests

# 目标网址
url = "https://www.baidu.com/"

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

try:
    response = requests.get(url, headers=headers, timeout=10)  # 超时设置为10秒
except:
    for i in range(4):  # 循环去请求网站
        response = requests.get(url, headers=headers, timeout=20)
        if response.status_code == 200:
            break
html_str = response.text

8. proxies代理参数的使用

为了让服务器以为不是同一个客户端在请求;为了防止频繁向一个域名发送请求被封ip,所以我们需要使用代理ip

100天精通Python(爬虫篇)——第44天:requests库大总结_第9张图片

语法:

response = requests.get(url, proxies=proxies)

proxies的形式: 字典

proxies = {
    "http": "http://12.34.5679:9527",
    "https": "https://12.34.5679:9527",
}

注意:如果proxies字典中包含有多个键值对,发送请求时将按照ur地址的协议来选择使用相应的代理ip

9. 发送post请求

requests模块发送post请求函数的其它参数和发送get请求的参数完全一 致

语法格式

response = requests.post(url, data) # data参数接收一个字典

如何找到data表单?

  • 以百度翻译为例:找到对应的请求,点击Payload,展开Form data表单

    100天精通Python(爬虫篇)——第44天:requests库大总结_第10张图片

  • 代码中构造data字典

    import requests
    
    url = "https://fanyi.baidu.com/"
    
    data = {
        'query': '爱'
    }
    response = requests.post(url)
    print(response.text)
    
  • 返回完整的网页

    100天精通Python(爬虫篇)——第44天:requests库大总结_第11张图片

你可能感兴趣的:(python,爬虫,开发语言)