3.网络爬虫——Requests模块get请求与实战

Requests模块get请求与实战

    • requests简介:
    • 检查数据
    • 请求数据
    • 保存数据

前言: 前两章我们介绍了爬虫和HTML的组成,方便我们后续爬虫学习,今天就教大家怎么去爬取一个网站的源代码(后面学习中就能从源码中找到我们想要的数据)。
📝​📝​此专栏文章是专门针对Python零基础爬虫,欢迎免费订阅!
📝​📝第一篇文章获得全站热搜第一,python领域热搜第一,欢迎阅读!
🎈🎈欢迎大家一起学习,一起成长!!
在这里插入图片描述

urllib模块:

urllib是python的内置HTTP请求库,包含4个模块

request: http的请求模块,传入UPL及额外的参数,就模拟发送请求
error 异常处理模块,确保程序不会意外终止
parse : 一个工具模块,提供了许多URL处理方法。
robotparser : 用来识别robots.txt文件,判断那些网站可以爬

pycharm外部库的urilib下:
在这里插入图片描述

requests简介:

requests是一个Python第三方库,用于发送HTTP请求。它提供了一种简单而优雅的方式来发送HTTP/1.1请求,并且可以自动处理连接池和重定向等问题。requests库可以在Python 2.7和Python 3中使用,支持HTTP和HTTPS请求,支持Cookie、代理、SSL证书验证等功能。

使用requests库可以方便地发送GET、POST、PUT、DELETE等请求,并且支持上传文件和发送JSON数据等操作。通过requests库,我们可以轻松地与Web服务进行交互,获取数据或提交数据。requests库已经成为Python中最常用的HTTP客户端库之一,被广泛应用于Web开发、数据分析、爬虫等领域。

安装requests库:
点击终端,输入pip install requests
在这里插入图片描述

上面这就表示安装成功。

然后接下来安装requests镜像源:
如图所示,在终端输入代码,出现下面情况就代表安装完成。
在这里插入图片描述

检查数据

检查数据是否在链接里
1.数据不在链接中:

打开网页,右键点击检查,然后点击网络,刷新,接着选择第一个文档,点击预览,这个时候我们发现,左边的照片或者其他信息不在预览里面,这个时候我们就无法获得想要的数据了。这种数据就属于客户端渲染,

在这里插入图片描述

2.数据在链接中:
在这里插入图片描述

打开网页,点击右键,点击检查,然后点击左上角的小箭头,移动到左边我们需要的数据上面,如果右边代码中出现相应的代码,就说明数据就在代码中,接着我们就开始后面的操作,方便获取我们需要的数据。

请求数据

浏览器页面的网址一定是qet请求
举个栗子:(如何查看请求头,请求体,以及响应体,在第二节里面有详细介绍,此处以及后面就不在过多介绍,以免让文章太繁琐)
在这里插入图片描述

现在我们知道数据在链接中,我们就要通过链接去获取他:

import requests

url = 'http://slide.news.sina.com.cn'  # 我们需要数据的链接(就是我们需要爬取的链接,因为数据就在链接里面)

# 确认请求,get请求
html = requests.get(url)
print(html.text)  # 打印网页源代码
print(html.status_code)  # 状态码
if html.status_code == 200:
    print('数据访问成功')
else:
    print('请求失败了')

这段代码使用了Python第三方库requests,发送了一个HTTP GET请求,并获取了HTTP响应的正文和状态码,并根据状态码判断请求是否成功。其中,url是一个字符串类型的参数,表示要发送HTTP请求的URL地址。
使用requests.get()函数发送HTTP GET请求,并将HTTP响应对象赋值给变量html。
使用text属性获取HTTP响应正文,并将其打印出来。此外,使用status_code属性获取HTTP响应状态码,并将其打印出来。
根据HTTP响应状态码判断请求是否成功,如果状态码为200,则表示请求成功,否则表示请求失败。(状态码详情可查阅第二节,html页面组成)

在这里插入图片描述

import requests

url = 'http://slide.news.sina.com.cn'  # 我们需要数据的链接(就是我们需要爬取的链接,因为数据就在链接里面)

# 确认请求,get请求
html = requests.get(url)
print(html.text)  # 打印网页源代码
print(html.status_code)  # 状态码
if html.status_code == 200:
    print('数据访问成功')
else:
    print('请求失败了')
print(html.url)  # 访问的网址
print(html.request.headers)  # 输出请求头信息


使用url属性获取HTTP请求的URL地址,并将其打印出来。
然后,使用request.headers属性获取HTTP请求的请求头信息,并将其打印出来。request属性是HTTP响应对象的一个属性,表示该HTTP响应对象对应的HTTP请求对象。因此,html.request.headers表示HTTP请求的请求头信息。

在这里插入图片描述

在网页源代码中也能查看请求头,但是没有代码运行来的方便快捷。

在这里插入图片描述

请求头的作用
请求头是HTTP协议中的一个重要部分,它包含了HTTP请求的一些元信息,比如请求方法、请求地址、协议版本、请求头、请求体等。请求头可以帮助服务器理解客户端发送的HTTP请求,以便正确处理HTTP请求。

请求头的作用主要有以下几点:

  1. 指定请求方法和请求地址:请求头中包含了HTTP请求的方法(GET、POST、PUT、DELETE等)和请求地址,告诉服务器要执行哪种操作。

  2. 指定请求体和请求参数:请求头中还可以包含请求体和请求参数,用于向服务器传递数据。

  3. 指定请求头信息:请求头中还包含了一些元信息,比如用户代理、Cookie、Referer等,用于告诉服务器一些附加信息,以便服务器做出更好的响应。

  4. 安全性:请求头中可以包含一些安全相关的信息,比如身份验证、防止跨站点请求伪造(CSRF)等。

请求头对爬虫来说,就好像一个面具,去模仿人去浏览网站,就不会被网站发现,也可以理解为打开网站的钥匙,上面我们知道,数据在链接中,但是我们申请后,返回状态码是418,请求失败,所有我们现在戴上面具,或者说,拿着钥匙再去申请,看看能不能成功打开。

import requests
import chardet

url = 'http://slide.news.sina.com.cn/c/slide_1_86058_567500.html#p=1'
headers = {
    'User-Agent': 'python-requests/2.28.2',
    'Accept-Encoding': 'gzip, deflate',
    'Accept': '*/*',
    'Connection': 'keep-alive'
}
html = requests.get(url, headers=headers).content
encoding = chardet.detect(html)['encoding']
html = html.decode(encoding)

# 将网页内容写入文件中
with open('example.html', 'w', encoding='utf-8') as f:
    f.write(html)

现在就好比我们成功的进入到别人家里面,然后我们将要拿数据,现在先看一下代码里面的东西。

运行成功后,我们大概看一下,数据较多,不做过多展示,截取部分内容:
在这里插入图片描述

接着我们在里搜索我们想要的数据,例如:

在这里插入图片描述

红色方框里面就是我们需要的东西,我们可以点击查看一下:

在这里插入图片描述

现在我们找到了我们需要的数据,因为我们还没有学会数据解析,暂时不能提取,无法精确的获取想要的东西,今天就不在这里讲解,后面章节会讲怎么精确的拿取我们想要的数据

保存数据

输入文件保存的代码:

import requests
import chardet

url = 'http://slide.news.sina.com.cn/c/slide_1_86058_567500.html#p=1'
headers = {
    'User-Agent': 'python-requests/2.28.2',
    'Accept-Encoding': 'gzip, deflate',
    'Accept': '*/*',
    'Connection': 'keep-alive'
}
html = requests.get(url, headers=headers).content
encoding = chardet.detect(html)['encoding']
html = html.decode(encoding)
print(html)
# 将网页内容写入文件中
with open('example.html', 'w', encoding='utf-8') as f:
    f.write(html)

这段代码可以将 html 变量中的网页内容写入到名为 example.html 的文件中。具体来说,open() 函数用于打开文件,'w' 参数表示以写入模式打开文件,encoding='utf-8' 参数表示指定编码格式为 UTF-8。然后使用 write() 方法将网页内容写入文件中。with 语句用于自动关闭文件。

需要注意的是,如果该文件不存在,则会自动创建该文件;如果该文件已经存在,则会覆盖原文件中的内容。如果要在已经存在的文件中追加内容,可以将 'w' 参数改为 'a'

我们的文件就会保存到文件中(仅展示部分代码):

在这里插入图片描述

在这里插入图片描述

今天知识分享就到此结束,欲知后续如何,请听下回分析。
在这里插入图片描述
悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

普通Java工程师 VS 优秀架构师

1 核心能力 1.1 要成为一名优秀的Java架构师 只懂技术还远远不够,懂技术/懂业务/懂管理的综合型人才,才是技术团队中的绝对核心。 不仅仅是架构师,所有的技术高端岗位,对人才的综合能力都有较高的标准。 架构路线的总设计师 规…

安卓渐变的背景框实现

安卓渐变的背景框实现1.背景实现方法1.利用PorterDuffXfermode进行图层的混合,这是最推荐的方法,也是最有效的。2.利用canvas裁剪实现,这个方法有个缺陷,就是圆角会出现毛边,也就是锯齿。3.利用layer绘制边框1.背景 万…

多线程案例——阻塞队列

目录 一、阻塞队列 1. 生产者消费者模型 (1)解耦合 (2)“削峰填谷” 2. 标准库中的阻塞队列 3. 自己实现一个阻塞队列(代码) 4. 自己实现生产者消费者模型(代码) 一、阻塞队列…

【Pytorch】 理解张量Tensor

本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 这是目录张量Tensor是什么?张量的创建为什么要用张量Tensor呢?总结张量Tensor是什么? 在深度学习中,我们经常会遇到一个概念&#xff…

更改Hive元数据发生的生产事故

今天同事想在hive里用中文做为分区字段。如果用中文做分区字段的话,就需要更改Hive元 数据库。结果发生了生产事故。导致无法删除表和删除分区。记一下。 修改hive元数据库的编码方式为utf后可以支持中文,执行以下语句: alter table PARTITI…

Vue初入,了解Vue的发展与优缺点

作者简介:一名计算机萌新、前来进行学习VUE,让我们一起进步吧。 座右铭:低头赶路,敬事如仪 个人主页:我叫于豆豆吖的主页 前言 从本章开始进行Vue前端的学习,了解Vue的发展,以及背后的故事。 一.vue介…

ASEMI代理瑞萨TW9992AT-NA1-GE汽车芯片

编辑-Z TW9992AT-NA1-GE是一款低功耗NTSC/PAL模拟视频解码器,专为汽车应用而设计。它支持单端、差分和伪差分复合视频输入。集成了对电池短路和对地短路检测,先进的图像增强功能,如可编程的自动对比度调整(ACA)和MIPI…

【Linux】网络编程套接字(下)

🎇Linux: 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看见坚持…

ASEMI代理MIMXRT1064CVJ5B原装现货NXP车规级MIMXRT1064CVJ5B

编辑:ll ASEMI代理MIMXRT1064CVJ5B原装现货NXP车规级MIMXRT1064CVJ5B 型号:MIMXRT1064CVJ5B 品牌:NXP /恩智浦 封装:LFGBA-196 批号:2023 安装类型:表面贴装型 引脚数量:196 类型&#…

【Hadoop-yarn-01】大白话讲讲资源调度器YARN,原来这么好理解

YARN作为Hadoop集群的御用调度器,在整个集群的资源管理上立下了汗马功劳。今天我们用大白话聊聊YARN存在意义。 有了机器就有了资源,有了资源就有了调度。举2个很鲜活的场景: 在单台机器上,你开了3个程序,分别是A、B…

Redis知识点汇总

前言 梳理知识 说一下项目中的Redis的应用场景 首先知道Redis的5大value类型: string,list,hash, set ,zset 2.基本上是缓存 3.为的是服务无状态, 4.无锁化 Redis是单线程还是多线程 1.无论什么版本,工作线程就一个 2.6.x高版本出现IO多线程

三天吃透操作系统面试八股文

本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址:https://github.com/…

基于python的超市历年数据可视化分析

人生苦短 我用python Python其他实用资料:点击此处跳转文末名片获取 数据可视化分析目录人生苦短 我用python一、数据描述1、数据概览二、数据预处理0、导入包和数据1、列名重命名2、提取数据中时间,方便后续分析绘图三、数据可视化1、美国各个地区销售额的分布&…

进阶C语言——指针(二)【题目练习】

文章目录1.指针和数组概念的理解2.指针和数组笔试题解析一维数组字符数组二维数组1.指针和数组概念的理解 指针和数组 数组:能够存放一组相同类型的元素,数组的大小取决于数组的元素个数和元素类型指针:也是地址或指针变量,大小是…

Spring Cloud -- GateWay

为什么需要网关在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的话会产生很多问题,例…

重构·改善既有代码的设计.04之重构手法(下)完结

1. 前言 本文是代码重构系列的最后一篇啦。前面三篇《重构改善既有代码的设计.01之入门基础》、《重构改善既有代码的设计.02之代码的“坏味道”》、《重构改善既有代码的设计.03之重构手法(上)》介绍了基础入门,代码异味,还有部…

【Java】你真的懂封装吗?一文读懂封装-----建议收藏

博主简介:努力学习的预备程序媛一枚~博主主页: 是瑶瑶子啦所属专栏: Java岛冒险记【从小白到大佬之路】 前言 write in the front: 如何理解封装? 试想:我们使用微波炉的时候,只用设置好时间,按下“开始”…

[C++]反向迭代器

目录 前言: 1 对反向迭代器的构造思想 2 实现反向迭代器 3 完整代码 前言: 本篇文章主要介绍了STL容器当中的反向迭代器,可能有朋友会说:“反向迭代器有什么好学的?不一样还是迭代器吗,我正向能写出来&…

【js逆向】hook大全

▒ 目录 ▒🛫 导读需求1️⃣ 普通函数2️⃣ 对象方法(Class.prototype)3️⃣ 对象属性(Object.defineProperty)4️⃣ Proxy5️⃣ 批量hook示例🛬 文章小结📖 参考资料🛫 导读 需求 …

【面试题系列】K8S常见面试题

目录 序言 问题 1. 简单说一下k8s集群内外网络如何互通的吧 2.描述一下pod的创建过程 3. 描述一下k8s pod的终止过程 4.Kubernetes 中的自动伸缩有哪些方式? 5.Kubernetes 中的故障检测有哪些方式? 6.Kubernetes 中的资源调度有哪些方式&#xff…