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.mzph.cn/news/880372.shtml

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

相关文章

甘蔗茎节检测系统源码分享

甘蔗茎节检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

Dependency Check:一款针对应用程序依赖组件的安全检测工具

关于Dependency Check Dependency-Check 是一款软件组合分析 (SCA) 工具,可尝试检测项目依赖项中包含的公开披露的漏洞。它通过确定给定依赖项是否存在通用平台枚举 (CPE) 标识符来实现此目的。如果找到,它…

【HTTP】请求“报头”,Referer 和 Cookie

Referer 描述了当前这个页面是从哪里来的(从哪个页面跳转过来的) 浏览器中,直接输入 URL/点击收藏夹打开的网页,此时是没有 referer。当你在 sogou 页面进行搜索时,新进入的网页就会有 referer 有一个非常典型的用…

绝了,自从用了它,我每天能多摸鱼2小时!

大家好,我是可乐。 俗话说的好:“摸鱼一时爽,一直摸鱼一直爽”。 作为一个程序员,是否有过调试代码熬到深夜?是否有过找不到解决方案而挠秃头顶? 但现在你即将要解放了,用了这款工具——秘塔…

PicoQuant公司的PicoHarp 300停产公告

尊敬的用户,您们好! 今天,我们完成了PicoHarp 300最后一份订单,这也是自第一台PicoHarp 300号售出20年后的最后一份订单。 PicoHarp 300作为市场上第一款USB-TCSPC设备,PicoHarp 300已售出约1600台,为Pic…

SpringCloudEureka简介

背景 SpringCloudEureka是基于NetfliEureka做了二次封装,负责微服务架构的服务治理功能。 SpringCloud通过为Eureka增加SpringBoot风格的自动化配置,只需要简单的引入依赖和注解配置,就能让SpringBoot构建的微服务应用轻松和Eureka服务治理体…

安卓13去掉下拉菜单的Dump SysUI 堆的选项 android13删除Dump SysUI 堆

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析3.1 位置13.2 位置24.代码修改5.编译6.彩蛋1.前言 客户需要去掉下拉菜单里面的Dump SysUI 堆图标,不让使用这个功能。 2.问题分析 android的下拉菜单在systemui里面,这里我们只需要定位到对应的添加代…

找到你的工具!5款免费可视化报表工具对比分析

选择合适的可视化工具对于分析和展示数据至关重要,以下是五款免费的可视化工具,它们各具特色,能够适应各种需求。本文将介绍每款工具的优势与不足,帮助你找到最合适的解决方案。 1. 山海鲸可视化 介绍:山海鲸可视化是…

【Linux】当前进展

驱动层日志添加了下文件目录,函数,代码行的打印(这里要小心,驱动目录源代码打印日志里边添进程号可能有问题,因为在驱动初始化的时候,内核还没有创建进程,不过猜测可以先不打印进程相关信息&…

计算机网络34——Windows内存管理

1、计算机体系结构 2、内存管理 分为连续分配管理和非连续分配管理 在块内存在的未使用空间叫内部碎片,在块外存在的未使用空间叫外部碎片 固定分区分配可能出现内部碎片,动态分区分配可能出现外部碎片 3、逻辑地址和实际地址的互相转换 4、缺页中断 …

算法.图论-并查集

文章目录 1. 并查集介绍2. 并查集的实现2.1 实现逻辑2.2 isSameSet方法2.3 union方法(小挂大优化)2.4 find方法(路径压缩优化) 3. 并查集模板4. 并查集习题4.1 情侣牵手4.2 相似字符串组 1. 并查集介绍 定义: 并查集是一种树型的数据结构,用于处理一些不…

SentencePiece进行文本分类

SentencePieces 前言 Step1:故事 SentencePiece 是一个无监督的文本分词器和 detokenizer(还原回去的?)主要用于词汇表大小是预定的文本生成系统中它拓展了原始句子的训练,实现子词单元如 BPE 和 unigram language model技术亮点 纯数据驱动&#xff…

Azure Kinect 人体跟踪关节

Azure Kinect 人体跟踪关节 azure kinect dk 提取人体骨骼 要在Azure Kinect DK上提取人体骨骼,你需要使用Azure Kinect SDK和OpenPose库。以下是一个简化的代码示例,展示如何集成这两个库来提取骨骼关键点: 首先,确保你已经安装…

Web3Auth 如何工作?

Web3Auth 用作钱包基础设施,为去中心化应用程序 (dApp) 和区块链钱包提供增强的灵活性和安全性。在本文档中,我们将探索 Web3Auth 的功能,展示它如何为每个用户和应用程序生成唯一的加密密钥提供程序。 高级架构 Web3Auth SDK 完全存在于用…

软件测试基础篇

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 “尽早的介入测试,遇到问题的解决成本就越低” 随着软件测试技术的发展,测试工作由原来单一的寻找缺陷逐渐发展成为预防缺陷,…

文章解析: 一不小心掉入了 Java Interface 的陷阱

一不小心掉入了 Java Interface 的陷阱_腾讯新闻 import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Iterator; import java.util.List;// 方便起见就都放在一个文件中了 public class TestSimpleResult {public static void ma…

Rust和Go谁会更胜一筹

在国内,我认为Go语言会成为未来的主流,因为国内程序员号称码农,比较适合搬砖,而Rust对心智要求太高了,不适合搬砖。 就个人经验来看,Go语言简单,下限低,没有什么心智成本&#xff0c…

华为认证HCIA篇--网络通信基础

大家好呀!我是reload。今天来带大家学习一下华为认证ia篇的网络通信基础部分,偏重一些基础的认识和概念性的东西。如果对网络通信熟悉的小伙伴可以选择跳过,如果是新手或小白的话建议还是看一看,先有个印象,好为后续的…

安卓Settings值原理源码剖析存储最大的字符数量是多少?

背景: 平常做rom相关开发时候经常需要与settings值打交道,需要独立或者存储一个settings的场景,群里有个学员朋友就问了一个疑问,那就是Settings的putString方式来存储字符,那么可以存储的最大字符是多少呢&#xff1…

Excel锁定单元格,使其不可再编辑

‌在Excel中,锁定单元格后仍然可以编辑‌,这主要涉及到对特定单元格或区域的锁定与保护工作表的设置。以下是实现这一功能的具体步骤: ‌解除工作表的锁定状态‌:首先,需要全选表格(使用CtrlA快捷键&#x…