当前位置: 首页 > news >正文

Python爬虫知识体系-----requests-----持续更新

数据科学、数据分析、人工智能必备知识汇总-----Python爬虫-----持续更新:https://blog.csdn.net/grd_java/article/details/140574349

文章目录

  • 一、安装和基本使用
    • 1. 安装
    • 2. 基本使用
    • 3. response常用属性
  • 二、get请求
  • 三、post请求
  • 四、代理

一、安装和基本使用

1. 安装

  1. 和解析库urllib几乎一摸一样,但是有些业务场景,用request更加方便

最好对比utllib学习:https://blog.csdn.net/grd_java/article/details/140589367

  1. 官方文档:https://requests.readthedocs.io/projects/cn/zh-cn/latest/

企业中用的最多的就是requests,底层实现就是urllib,在python2和python3中通用,方法完全一样;简单易用

安装requests
  1. 执行命令pip install requests即可安装
    在这里插入图片描述
  2. 代码中导包不报错表示安装成功
    在这里插入图片描述

2. 基本使用

基本使用
'''导包(start)'''
import requests
'''导包(end)'''
url = 'http://www.baidu.com'
# 通过get方式请求url
response = requests.get(url)
# 设置编码格式
response.encoding = 'utf-8'
# response对象的类型为Response类型,和urllib的HttpResopnse对象是不一样的
print(type(response))
# 以字符串形式返回网页源码
print(response.text)
# 获取响应状态码
print(response.status_code)
# 获取请求的url
print(response.url)
# 获取响应头
print(response.headers)
# 获取响应的字节类型
print(response.content)

3. response常用属性

response.text # 响应体 str类型
response.encoding #从HTTP header中猜测的响应内容的编码方式
respones.content #响应体bytes类型
response.status_code #响应状态码
response.request.headers #响应对应的请求头
response.headers #响应头
response.cookies #响应的cookie(经过了set-cookie动作)
response.url #获取访问的url
response.json() #获取ison数据 得到内容为字典(如果接口响应体的格式是ison格式时)
response.ok# 如果status code小于200,response.ok返回True。# 如果status code大于200,response.ok返回False.

response.text和response.content的区别


  1. response.text
  1. 类型:str
  2. 解码类型: requests模块自动根据HTTP 头部对响应的编码作出有根据的推测,推测的文本编码
  3. 如何修改编码方式:response.encoding=“gbk/UTF-8”
  1. response.content
  1. 类型:bytes
  2. 解码类型:没有指定
  3. 如何修改编码方式:response.content.deocde(“utf8")

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


  1. response.content.decode()
  2. response.content.decode(“UTF-8”)
  3. response.text

以上三种方法从前往后尝试,能够100%的解决所有网页解码的问题。所以,更推荐使用 response.content.deocde()的方式获取响应的html页面

二、get请求

同样是百度,例如百度北京看搜索结果。requests库作为独属于python的,是不需要像urllib一样对参数编码的


在这里插入图片描述

'''导包(start)'''
import requests
'''导包(end)'''url = 'http://www.baidu.com/s?' # 路径中的?可加可不加
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0"}
data = {'wd':'北京'
}
# def get(url, params=None, **kwargs):
# url       请求资源路径
# params    参数
# kwargs    字典
response = requests.get(url=url, params=data, headers=headers)
response.encoding = 'utf-8'
content = response.text
print(content)
# 也可以一行搞定哦
print(response.content.decode('utf-8'))

可见对比urllib有以下几点不同


  1. 参数使用params传递
  2. 参数无需urlencode编码
  3. 不需要请求对象的定制
  4. 请求资源路径(url)中的?可以加也可以不加

把网络上的图片保存到本地

三、post请求

我们使用讲解urllib中的百度翻译的案例,看看实现同样的效果和urllib有何区别
在这里插入图片描述

  1. post请求,不需要编解码
  2. 请求参数是经典的data
  3. 不需要请求对象的定制
'''导包(start)'''
import requests
'''导包(end)'''url = 'https://fanyi.baidu.com/sug'
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0"}
data = {"kw":"spider"
}
# def post(url, data=None, json=None, **kwargs):
# url       请求资源路径
# data      参数对象
# json      json对象
# kwargs    字典
# 我们以传输data对象为例,传输json同理,将data换成json即可
response = requests.post(url=url, data=data, headers=headers)
content = response.text
# 因为content返回的不是utf-8编码格式,我们看起来比较费劲
# 通过json库将其转为utf-8
import json
obj = json.loads(content)
print(obj)

四、代理

依然和urllib完全一样的操作
在这里插入图片描述

'''导包(start)'''
import requests
'''导包(end)'''url = 'http://www.baidu.com/s?'
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0"}
data = {"wd":"ip"
}
# 1. 获取代理handler对象,并指定代理ip字典proxies
proxies = {'http': '218.87.205.38:20433',
}
response = requests.get(url = url, params=data, headers=headers,proxies=proxies)
content = response.text
with open('daili.html','w',encoding='utf-8') as fp:fp.write(content)
http://www.lryc.cn/news/485933.html

相关文章:

  • Swift的可选绑定(Optional binding)
  • 硬石电机学习2024116
  • 行业类别-金融科技-子类别区块链技术-细分类别智能合约-应用场景供应链金融课题
  • ElementPlus el-upload上传组件on-change只触发一次
  • 论文阅读:Uni-ISP Unifying the Learning of ISPs from Multiple Cameras
  • AntD表单自定义组件
  • 19-简单理解JavaScript中的Promise:手写Promise实现
  • elementUI input 禁止内容两端存在空格,或者是自动去除两端空格
  • Go语言24小时极速学习教程(一)基础语法
  • LLMs之Code:Qwen2.5-Coder的简介、安装和使用方法、案例应用之详细攻略
  • pytest结合allure做接口自动化
  • TypeScript简介:TypeScript是JavaScript的一个超集
  • 【循环测试试题2】小X与三次方
  • 【Python · PyTorch】卷积神经网络(基础概念)
  • 深入描述dts和dtsi的区别
  • 京准时钟:一种北斗卫星校时器的结构设计
  • 【WiFi】ubuntu20.4 WiFi6 无线抓包环境搭建及使用
  • 《Java核心技术 卷I》用户界面AWT事件继承层次
  • 蓝牙 HFP 协议详解及 Android 实现
  • sqli-labs靶场17-20关(每日四关)持续更新!!!
  • 动态规划-完全背包问题——518.零钱兑换II
  • [模板总结] - 单向链表LinkedList操作
  • fastadmin多个表crud连表操作步骤
  • 山西省网络建设与运维第十八届职业院校技能大赛(样题)
  • 服务端高并发分布式结构进阶之路
  • 分布式微服务项目,同一个controller不同方法间的转发导致cookie丢失,报错null pointer异常
  • STM32 ADC --- 任意单通道采样
  • vscode中执行git合并操作需要输入合并commit信息,打开的nano小型文本编辑器说明-
  • 蓝桥杯每日真题 - 第7天
  • 【Git】Git Clone 指定自定义文件夹名称:详尽指南