Python爬虫之requests(二)

Python爬虫之requests(二)

前面演示了requests模块的四种请求方式。接下来再来演示下综合的练习。

一、requests模块综合练习

  • 需求:爬取搜狗知乎某一个词条对应的某个范围页码表示的页面数据。

点开搜狗首页,有一个知乎的版块。
在这里插入图片描述

搜过框搜索可以看到很多页面词条。
在这里插入图片描述
我们的要求就是爬取这些页码的比如1-3页数据。
之前案例都是获取单个页面数据,而这里是多个页面数据。

import requests
import os#创建文件夹
if not os.path.exists("./pages"):os.mkdir("./pages")#指定URL,思考一下,三个页码就要指定三个url吗,那三百个岂不是要300条url
#原url = "https://www.sogou.com/sogou?query=%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD&pid=sogou-wsse-ff111e4a5406ed40&insite=zhihu.com&aria=0&sut=2057&sst0=1727143354044&lkt=1%2C1727143353930%2C1727143353930&sessiontime=1727143270719&page=2&ie=utf8"
#删除不必要的参数随后测试,发现上述url和下面简化的url是一样的页面。这里可以看到page=2就是页面2,那么page就是确定页面的参数了
#设计为通用URL
#url = "https://www.sogou.com/sogou?query=%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD&insite=zhihu.com&page=2&ie=utf8"
#指定url
url = "https://www.sogou.com/sogou?"#封装请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0"
}#外界获取搜索参数
word = input("请输入您想搜索的数据:")#定位页码
start_page = int(input("您想查询从那一页开始的页码:"))
end_page = int(input("您想到哪一些查询结束:"))#利用循环,左闭右开区间,所以要加1。
#比如用户数据1-3页。start_page=1,end_page=3。
#for循环的range(1,4)。那么会循环3次,第一个page=1,第二次page=2,第三次page=3
for page in range(start_page, end_page+1):#封装参数param = {"query": word,"insite": "zhihu.com","page": page,"ie": "utf-8"}#发起请求:response = requests.get(url=url,params=param,headers=headers)#获取响应页面数据(指定页码的数据page)page_text = response.text#持久化存储fileName = word+str(page)+".html"filePath = "pages/"+fileNamewith open(filePath,"w",encoding="utf-8") as f:f.write(page_text)print(f"文件第{page}页数据写入成功!")

类似的,可以再试试爬取贴吧:

import requests
import os#创建文件夹
if not os.path.exists("text"):os.mkdir("text")#用户输入词条
page_citiao = input("您想搜索什么词条呢?")#用户输入页码数据
start_page = int(input("你想搜索从哪个开始的页码的数据:"))
end_page = int(input("你想搜索从哪个开始的页码的数据:"))#初始url
# url = "https://tieba.baidu.com/f?kw=%E5%8E%9F%E7%A5%9E%E5%86%85%E9%AC%BC&ie=utf-8&pn=50"
url = "https://tieba.baidu.com/f?"#伪装ua
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0"
}#参数拼接
for page in range(start_page,end_page+1):param = {"kw": page_citiao,"ie": "utf-8","pn": page}response = requests.get(url=url,params=param,headers=headers)#获取页面数据page_text = response.text#持久化存储fileName = page_citiao + str(page) + ".html"filePath = "./text/" + fileNamewith open(filePath,"w",encoding="utf-8") as f:f.write(page_text)print(f"写入第{page}页成功!")

二、requests模块高级之cookie操作

  • cookie:
    基于用户的数据
    - 需求:爬取张三用户的豆瓣网个人主页页面数据
  • cookie作用: 服务器端使用cookie来记录客户端的状态信息
    流程:
    1、执行登录操作(获取cookie)
    2、在发起个人主页请求时,需要将cookie携带到该请求中
    注意—> session对象:发送请求(会将cookie对象自动存储),第一次发送session请求之后,cookie就会自动存储到session里,那么第二次个人主页请求携带cookie,服务器端就能识别到cookie,返回个人主页数据。
import requests#创建seesion,requests模块有一个session方式,用它就能创建session请求
session = requests.session()#发起登录请求获取cookie,存储到session对象中(当然要发起session请求才能将cookie存储到session中)
login_url = "https://accounts.douban.com/login"#伪装ua
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0"
}data = {"source": None,"redir": "https://accounts.douban.com/login","form_email": "","form_password": "","login": "登陆"
}#使用session发起请求,第一次发起session是为了获取cookie,所以不需要此页面数据。
login_response = session.post(url=login_url,data=data,headers=headers)#对个人主页发起请求,获取响应页面数据(session里已经携带cookie)
url = "https://www.douban.com/people/230085989/?"
param = {"_i": "7151806ehwFyC0"
}#获得响应对象
response = session.get(url=url,params=param,headers=headers)
page_text = response.text#持久化存储
with open("douban110.html","w",encoding="utf-8") as f:f.write(page_text)

其实爬虫程序就是遵从浏览器的请求流程。

三、requests模块高级之代理操作

  • 代理操作:
    • 代理:第三方代理本体执行相关事务。生活:代购,微商,中介…
    • 为什么要使用代理?
      反爬操作。
      使用代理是一种反反爬手段
    • 分类:
      正向代理:代替客户端获取数据
      反向代理:代替服务器端提供数据
    • 免费代理ip的网站提供商

    https://www.kuaidaili.com/free/

import requests#首先百度查找自己的ip,拿取url
url = "http://ip.900cha.com/"#ua伪装
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0"
}#代理ip封装
proxy = {"http": "117.42.94.223:16388"
}#更换网络ip,
response = requests.get(url=url,proxies=proxy,headers=headers)with open("./daili.html","w",encoding="utf-8") as f:f.write(response.text)

好像有点点问题,代理ip不好找。。。(mark一下之后再改)

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

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

相关文章

敏感字段加密 - 华为OD统一考试(E卷)

2024华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集 题目描述 【敏感字段加密】给定一个由多个命令字组成的命令字符串: 1、字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号; 2、命令字之间以一个或多个下划线 进行分割; 3、可…

登录功能开发 P167重点

会话技术: cookie jwt令牌会话技术: jwt生成: Claims:jwt中的第二部分 过滤器: 拦截器: 前端无法识别controller方法,因此存在Dispa什么的

QT——初识

目录 前言 1.创建一个QT项目 2.查看生成的文件 3.打印一条hello world! ①使用控件实现 ②使用代码实现 4.Qt的编码格式 5.信号和槽 6.Qt中的坐标系 前言 QT是一款可跨平台的电脑客户端开发软件,本文将介绍一些有关QT使用的基础内容。 1.创建一个…

介绍我经常使用的两款轻便易用的 JSON 工具

第一款是 Chrome Extension,名叫 JSON Viewer Pro,可以在 Chrome 应用商店下载: 点击右上角的 JSON Input,然后可以直接把 JSON 字符串内容粘贴进去,也直接直接加载本地 JSON 文件。 可以在树形显示和图形显示两种模式…

winform—实现窗口传值

winform实现窗口传值 在WinForms应用程序中,实现窗体间传值可以通过几种方式: 方式一通过构造函数传值 第一个窗体 public partial class Form1 : Form{public Form1(){InitializeComponent();}private void buttonOpenForm2_Click(object sender, Ev…

数学建模研赛总结

目录 前言进度问题四分析问题五分析数模论文经验分享总结 前言 本文为博主数学建模比赛第五天的内容记录,希望所写的一些内容能够对大家有所帮助,不足之处欢迎大家批评指正🤝🤝🤝 进度 今天已经是最后一天了&#xf…

《论文阅读》 用于产生移情反应的迭代联想记忆模型 ACL2024

《论文阅读》 用于产生移情反应的迭代联想记忆模型 ACL2024 前言简介任务定义模型架构Encoding Dialogue InformationCapturing Associated InformationPredicting Emotion and Generating Response损失函数问题前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦…

基于YOLOv8目标检测与chef-transformer(T5)从图像创建食谱

前言 在本文中,将演示如何使用从Roboflow获得的开源产品数据来训练我的YOLOv8模型,然后将其与从Hugging Face获得的chef-transformer(T5)模型集成。应用程序的主要目标是将检测到的对象参数化地发送到语言模型,并在NL…

sentinelhub3.7相比3.4的版本主要变化

sentinelhub3.7相比3.4的版本,主要变化包括: 1. 增加对sentinel 基线04.00数据产品的支持; 2. 将aws数据下载模块独立出来 3.4版本 3.7版本 3. 原来的DataSource改为DataCollection 3.7版本不再支持DataSource 3.4版本中的DataSource 3.7版本使用Data…

C#开发中如何在不破坏封装性下调用控件

在C#开发中,我们知道每个设计文件在完成后都会存在封装性,如果是方法,对象的调用,我们可以采取public方法来允许外部的访问,但是对于控件来说,封装性是与生俱来的,强行破环封装既复杂&#xff0…

如何获取钉钉webhook

第一步打开钉钉并登录 第二步创建团队 并且 添加自定义 机器人 即可获取webhook

Ajax ( 是什么、URL、axios、HTTP、快速收集表单 )Day01

AJAX 一、Ajax是什么1.1名词解释1.1.1 服务器1.1.2 同步与异步1. 同步(Synchronous)2. 异步(Asynchronous)3. 异步 vs 同步 场景4. 异步在 Web 开发中的常见应用: 1.2 URL 统一资源定位符1.2.1 URL - 查询参数1.2.2 ax…

03-指针的类型,算术运算,void指针

指针是强类型的,需要特定类型的指针来存放特定类型变量的地址. 指针作用: 储存内存地址; 解引用那些地址的内容(访问和修改地址中的值) 一、整形,字符型指针输出: #include <stdio.h>int main(int argc, const char* argv[]) {int a 1025;int* p;p &a;printf(&qu…

使用dockerfile来构建一个包含Jdk17的centos7镜像(构建镜像:centos7-jdk17)

文章目录 1、dockerfile简介2、入门案例2.1、创建目录 /opt/dockerfilejdk172.2、上传 jdk-17_linux-x64_bin.tar.gz 到 /opt/dockerfilejdk172.3、在/opt/dockerfilejdk17目录下创建dockerfile文件2.4、执行命令构建镜像 centos7-jdk17 : 不要忘了后面的那个 .2.5、查看镜像是…

基于SSM+小程序的电影院订票选座管理系统(电影2)(源码+sql脚本+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM的电影院订票选座小程序管理系统实现了管理员和用户二个角色。管理员实现了用户管理、影院信息管理、电影类型管理、电影信息管理、系统管理、订单管理等。用户实现了影院信息、电…

C语言系列4——指针与数组(1)

我们开始C语言的指针与数组 这部分开始进阶了&#xff0c;得反复学习 在开始正题之前&#xff0c;写说一下我们都知道当写一个函数的时候需要进行传参&#xff0c;当实参传递给形参的时候&#xff0c;形参是有独立空间的&#xff0c;那么数组传参又是怎么样的呢&#xff0c;我…

AI换脸技术新纪元:直播与视频创作的新利器

在数字媒体时代&#xff0c;实时面部交换技术正变得越来越流行。它不仅为视频创作者提供了新的表达方式&#xff0c;也为直播行业带来了革命性的变化。以下是一些目前市场上领先的实时面部交换软件&#xff1a; &#x1f31f; FaceFusion FaceFusion 是一款功能强大的实时面部…

如何利用ChatGPT开发一个盈利的AI写作助手网站

3-1 整体介绍写作助手及原型展示说明 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正逐步改变我们的生活方式&#xff0c;特别是在内容创作领域。本文将详细介绍如何利用ChatGPT技术&#xff0c;开发一个能够生成高质量内容的AI写作助手网站&#xff…

golang小项目1-家庭收支记账系统

项目地址&#xff1a;golang小项目 参考资料&#xff1a;尚硅谷golang教程P229 家庭收支记账系统 1. 系统简介 1.1 项目背景 在现代社会中&#xff0c;家庭的财务管理显得尤为重要。随着生活成本的不断上升&#xff0c;家庭需要有效地记录和分析收支情况&#xff0c;以确保…

1、深入理解Redis线程模型

文章目录 一、Redis是什么&#xff1f;有什么用&#xff1f;1、Redis是什么&#xff1f;2、2024年的Redis是什么样的&#xff1f; 二、Redis到底是单线程还是多线程&#xff1f;三、Redis如何保证指令原子性1、复合指令2、Redis事务3、Pipeline4、lua脚本5、Redis Function6、R…