Python爬虫之requests模块(一)

Python爬虫之requests模块(一)

学完urllib之后对爬虫应该有一定的了解了,随后就来学习鼎鼎有名的requests模块吧。

一、requests简介。

1、什么是request模块?

requests其实就是py原生的一个基于网络请求的模块,模拟浏览器发起请求,是不是和urllib很像。没错,其实requests和urllib是有很多相似之处的,但是requests更加的便捷、简单。

2、为什么要使用requests模块?

一个技术的出现,肯定是有所图的,回想一下urllib的使用。
第一:是不是如果url携带中文,是不是每次都要对url进行编码?(使用quote函数),如果一个url中,有很多组参数都带中文,那岂不是需要对url进行数次的编码?
第二:基于post请求,需要手动的处理post请求的参数(urlencode函数)
第三:urllib处理cookie和代理的操作比较繁琐。

但是对于requests来说,则会自动处理url编码、自动处理post请求参数,还简化了cookie和代理操作等等

3、requests模块如何被使用?

其实和其他所有模块一样,需要先使用pip安装,随后import调用

pip install requests

具体使用流程和urllib几乎类似:

  1. 指定url
  2. 使用requests模块发起请求
  3. 获取响应数据
  4. 进行持久化存储

二、基于requests模块发起get请求

1、requests模块处理不带参数的get请求

  • 需求爬取搜狗首页页面数据
import requests
#1、指定url
url = "https://www.sogou.com/"#2、发起一个get请求,直接调用requests的get方法,url参数为指定爬取的url
#get方法会返回请求成功后的响应对象
response = requests.get(url=url)#3、获取响应中的数据值,text属性作用是获取响应对象中字符串形式的页面数据
page_data = response.text# print(page_data)
#4、持久化存储
with open("sougou_req.html","w",encoding="utf-8") as f:f.write(page_data)

其实和urllib很类似。但是可以看到响应对象的属性,有一个text。
其实关于响应对象的常用属性还是挺多的,如下常见的:

requests对象中其他重要的属性:

response.content  #content属性和text类似,只不过返回的是响应对象中二进制(byte)类型的数据
response.status_code #status_code很简单明了,就是返回响应状态码,比如200、404、502等...
response.headers  #返回响应头信息,字典形式展示
response.url # 获取请求当中指定的url

2、requests模块处理携带参数的get请求

  • 需求:指定一个词条,获取搜狗搜索结果所对应的页面数据

第一种方式:

import requests#指定URL,query后面是请求参数,词条是孙燕姿,编码格式是utf-8
url = "https://www.sogou.com/web?query=孙燕姿&ie=utf8"#发送请求,requests即使请求url携带参数,也同样可以直接使用get函数对其发起请求
response = requests.get(url=url)#获取响应页面数据
page_data = response.text#持久化存储
with open('sunyanzi_re.html', 'w', encoding='utf-8') as f:f.write(page_data)

第二种方式:

import requests#指定URL,query后面是请求参数,参数先不写
url = "https://www.sogou.com/web"#get方法其实还有一个params的参数,可以将参数使用字典的方式直接赋值
#将参数封装到字典中
params = {"query": "孙燕姿","ie": "utf-8"
}
#使用get的params赋值
response = requests.get(url, params=params)#查看响应状态码
print(response.status_code)

这里使用status_code返回请求的状态码,成功则为200。

3、requests模块get请求自定义请求头信息

requests模块自定义请求头信息和urllib类似:

import requests#自定义请求头信息
url = "https://www.sogou.com/web"#将参数封装到字典中
params = {"query": "孙燕姿","ie": "utf-8"
}#自定义请求头信息
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0"
}#使用get的headers自定义请求头信息,将请求头信息赋值给headers
response = requests.get(url, params=params,headers=headers)#获取页面响应数据
data_page = response.text#持久化存储
with open("ff.html","w",encoding="utf-8") as f:f.write(data_page)

三、基于requests模块发起post请求

  • 需求:登陆豆瓣,获取登录成功后的页面数据

首先这里需要获取到登陆时的URL
在这里插入图片描述
查看数据表单,确认用户数据。(这里我发现豆瓣密码居然是明文传输的。)在这里插入图片描述

import requests#指定POST请求的URL
url = "https://accounts.douban.com/j/mobile/login/basic"#封装post请求的data参数,data参数是账号密码信息,在浏览器中复制数据表单!
data = {"remember": "true","name": "**","password": "**","ticket": "tr0kBmbIbu****vjIlOi6F7Q**","randstr": "**","tc_app_id": "204**"
}#伪装UA
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0"
}#发起post请求,调用post方法,第二个参数是data参数,第三个参数为自定义请求头信息
response = requests.post(url=url,data=data,headers=headers)#获取响应对象中的页面数据
data_page = response.text#持久化保存
with open("douban_re.html","w",encoding="utf-8") as f:f.write(data_page)

四、quests模块的ajax的get请求

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。
ajax是一种浏览器通过js异步发起请求,局部更新页面的技术。
Ajax请求的局部更新,浏览器地址栏不会发生变化
局部更新不会舍弃原来页面的内容

  • 需求:抓取豆瓣电影上的详情数据

当然,首先还是得获取到一个ajax的请求。这里通过开发者工具抓取到get方式的URL
在这里插入图片描述

这里注意到URL是携带参数的,可以点开GET左边的箭头打开复制下面的参数。
在这里插入图片描述

import requests#url携带参数,需要封装字典或者抽取到params中
#url = "https://movie.douban.com/j/chart/top_list?type=5&interval_id=100:90&action=&start=20&limit=20"
url = "https://movie.douban.com/j/chart/top_list"#抽取参数,start表示从20开始获取,获取20个电影
params = {"type": "5","interval_id": "100:90","action": "","start": "20","limit": "20"
}#自定义请求头信息
heards = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0"
}#发起请求,ajax依旧是get方法
response = requests.get(url=url,params=params,headers=heards)data_page = response.text
print(data_page)

五、quests模块的ajax的post请求

  • 需求:爬取肯德基城市餐厅位置数据

打开kfc官网

http://www.kfc.com.cn/kfccda/index.aspx在这里插入图片描述
点击查询按钮,就可以看到一个异步的ajax请求
在这里插入图片描述
这里选择北京,点击查询并且抓取XHR就能抓取到这个ajax请求。在这里插入图片描述
同样表单数据可以看到参数
在这里插入图片描述

import requests#指定url
url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname"#处理URL
data = {"cname": "北京","pid": "","pageIndex": "1","pageSize": "10"
}#伪装UA
heards = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0"
}#发起基于ajax的post请求
response = requests.post(url=url,params=data,headers=heards)kfc = response.text
print(kfc)

拿到结果可以验证一下,这就是基于ajax的post请求。在这里插入图片描述

六、初步总结

使用requests模块基于ajax的post和get请求和普通的get和post请求没有什么差别,唯一的不同是必须要基于抓包工具抓取异步请求的url。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/434193.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

封装左侧抽屉可拖拽组件【可多个】

一、案例效果 二、案例代码 封装抽屉组件 <template><div class"drag-drawer"><div class"out-box" :style"style"><mtd-tooltip:content"collapse ? 展开面板 : 收起面板"class"tool-tip":placeme…

AI周报(9.22-9.28)

AI应用-Siipet宠物沟通师 Siipet是一款由SiiPet公司推出的创新宠物行为分析相机&#xff0c;旨在通过尖端技术加深宠物与主人之间的情感联系。这款相机利用先进的AI算法&#xff0c;能够自动识别和分析家中宠物的行为&#xff0c;并提供定制化的护理建议。 SiiPet相机的核心功…

GUI-Guider LVGL 添加自定义代码

添加自定义代码时&#xff0c;分为上线两端 1.上部分可有可无 2.下部分为你触发事件时调用的语句 具体集合下方图片 示例参考

Python入门:掌握inspect模块,轻松调试你的代码!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 什么是inspect模块?📝 inspect模块的常用方法📝 1. 获取对象的信息📝 2. 获取函数的参数📝 3. 检查对象类型📝 4. 获取文档字符串📝 5. 获取调用方法的名称📝 实际应用场景⚓️ 相关链接 ⚓️…

[大语言模型-论文精读] Diffusion Model技术-通过时间和空间组合扩散模型生成复杂的3D人物动作

​​​​​​Generation of Complex 3D Human Motion by Temporal and Spatial Composition of Diffusion Models L Mandelli, S Berretti - arXiv preprint arXiv:2409.11920, 2024 通过时间和空间组合扩散模型生成复杂的3D人物动作 摘要 本文提出了一种新的方法&#xff0…

Spring AOP - 注解方式实现

前文已经讨论了基于配置文件方式实现Spring AOP&#xff08;Spring AOP - 配置文件方式实现&#xff09;&#xff0c;本文采用注解的方式实现前文相同的功能。配置步骤如下&#xff1a; 1、项目增加aop依赖&#xff08;pom.xml) <dependency><groupId>org.springfr…

linux 安装 tomcat9、java环境

一、安装 Java环境 1. 下载文件 https://repo.huaweicloud.com/java/jdk/ 或者网盘&#xff1a;通过网盘分享的文件&#xff1a;jdk-8u192-linux-x64.tar.gz 链接: https://pan.baidu.com/s/1V3pQWzgSLJxdrUdmmKueRA 提取码: qspw 2. 查看Linux系统是否有自带的jdk&#xf…

代码随想录_刷题记录_第四次

二叉树 — 理论基础 种类&#xff1a; 满二叉树&#xff08;所有层的节点都是满的&#xff0c;k&#xff1a;深度 节点数量&#xff1a;2^k - 1&#xff09;完全二叉树&#xff08;除了最后一层&#xff0c;其余层全满&#xff0c;并且最后一层从左到右连续&#xff09;二叉搜…

C语言扫盲

文章目录 C版本C语言特征GCCprintf数据类型函数指针内存管理void指针 Struct结构和Union结构typedef预处理器make工具cmake工具Projectintegral of sinc functionemulator embedded systeman event schedule 补充在线Linux终端安装Linux参考 建议还是国外教材学习…人家的PPT比…

【ESP32】Arduino开发 | I2C控制器+I2C主从收发例程

有关I2C控制器的详细介绍放在了IDF开发的文章中&#xff0c;跳转栏目目录可以找到对应的文章。 1. API Arduino启动时就已经实例化了两个I2C设备类&#xff0c;分别对应Wire和Wire1对象。 1.1 初始化 bool begin(int sda, int scl, uint32_t frequency0); // returns true, i…

【2023工业3D异常检测文献】PointCore: 基于局部-全局特征的高效无监督点云异常检测器

PointCore: Efficient Unsupervised Point Cloud Anomaly Detector Using Local-Global Features 1、Background 当前的点云异常检测器可以分为两类&#xff1a; &#xff08;1&#xff09;基于重建的方法&#xff0c;通过自动编码器重建输入点云数据&#xff0c;并通过比较原…

召回09 双塔模型+自监督学习

引入&#xff1a; 自监督学习改进双塔模型&#xff0c;可以提升业务指标。自监督学习是把物品塔学习得更习的更好。 长尾物品的曝光和点击数量太少&#xff0c;训练的样本次数不够。自监督可以更好地学习长尾数据的物品表征。 双塔模型的训练&#xff1a; 线上召回的时候不用纠…

【tbNick专享】虚拟机域控、成员服务器、降级等管理

在 VMware 中完成四台域控服务器、一台成员服务器的创建、降级域控为成员服务器&#xff0c;并创建子域的操作。 1. 创建四台域控和一台成员服务器 1.1 在 VMware 中创建虚拟机 启动 VMware Workstation&#xff1a; 打开 VMware Workstation&#xff0c;点击 “创建新的虚拟…

AIGC学习笔记—minimind详解+训练+推理

前言 这个开源项目是带我的一个导师&#xff0c;推荐我看的&#xff0c;记录一下整个过程&#xff0c;总结一下收获。这个项目的slogan是“大道至简”&#xff0c;确实很简。作者说是这个项目为了帮助初学者快速入门大语言模型&#xff08;LLM&#xff09;&#xff0c;通过从零…

十分钟实现内网连接,配置frp

十分钟实现内网连接&#xff0c;配置frp 一.frp是什么&#xff1f;其实是一款实现外网连接内网的一个工具&#xff0c;个人理解&#xff0c;说白了就像是teamviwer一样&#xff0c;外网能访问内网。 利用处于内网或防火墙后的机器&#xff0c;对外网环境提供 http 或 https 服…

CSS04-Chrome调试工具

Chrome 浏览器提供了一个非常好用的调试工具&#xff0c;可以用来调试我们的 HTML结构和 CSS 样式。

Redis实战(使用Scan,Lua脚本,一次扣多个库存,多线程并发使用,并发获取分布式锁,BItMap实现签到和在线统计)

1.使用Scan 2.lua脚本操作Redis 一次扣减一个商品库存 一次扣减多个商品的库存 Testvoid test100() {String key "product.1";stringRedisTemplate.opsForValue().set("product.1","10");stringRedisTemplate.opsForValue().set("produc…

在一个.NET Core项目中使用RabbitMQ进行即时消息管理

为了在一个.NET Core项目中使用RabbitMQ进行即时消息管理&#xff0c;以下是详细的全程操作指南&#xff0c;包括安装、配置、编写代码和调试使用。 一、安装RabbitMQ 1. 安装Erlang RabbitMQ依赖Erlang&#xff0c;因此需要先安装Erlang。 Windows: 下载并运行Erlang安装…

千亿数据-异地容灾-查询打印——MySQL大数据优化

1. 数据备份策略 - 定期全量备份&#xff1a;制定周期性的全量数据备份计划&#xff0c;确保数据的完整性。 - 增量备份&#xff1a;在全量备份之间进行增量备份&#xff0c;减少备份时间和存储空间。 2. 数据存储 - 分布式存储&#xff1a;利用分布式存储系统来存…

港科夜闻 | 香港科大颁授荣誉大学院士予五位杰出人士

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大颁授荣誉大学院士予五位杰出人士。香港科大9月24日向五位杰出人士颁授荣誉大学院士&#xff0c;他们分别为包弼德教授、简吴秋玉女士、高秉强教授、吴永顺先生及容永祺博士(按姓氏英文字母排序)。荣誉大学院士颁…