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

Python 爬虫基础——http请求和http响应

写本篇文章,我认为是能把自己所理解的内容分享出来,说不定就有和我一样有这样思维的共同者,希望本篇文章能帮助大家!✨✨

文章目录

  • 一、 🌈python介绍和分析
  • 二、 🌈http请求
  • 三、 🌈http响应
  • 四、 🌈教程演示
  • 五、🌈获取豆瓣top榜上前250部电影的响应内容


一、 🌈python介绍和分析

Python爬虫,又称网络爬虫或网页抓取程序,是一种自动化程序,它主要用于从互联网上抓取大量信息。这类程序按照预设的规则遍历互联网上的网页,并抽取其中有价值的数据。

思维导图
在这里插入图片描述


具体内容,Python爬虫通常涉及以下几个核心步骤:

  1. 发起请求

    • 使用Python中的HTTP库(如requests)模拟浏览器发送HTTP/HTTPS请求到目标网站,每个请求都包含了URL地址以及可能的请求头信息(如User-Agent、Cookie等)。
  2. 接收响应

    • 当服务器接收到请求后,会返回一个HTTP响应,其中包括状态码、响应头和网页内容(通常是HTML,但也可能是JSON、XML或其他格式)。
  3. 解析内容

    • 使用解析库(如BeautifulSouplxml用于HTML/XML解析,PyQueryparsel等)对响应内容进行解析,从中提取所需的数据。如果是结构化数据如JSON,可以直接使用Python的json模块解析。
  4. 数据处理与存储

    • 抽取后的数据会被进一步处理(清洗、转化等),然后存储在本地文件(如CSV、JSON、TXT等格式)或数据库系统(如MySQL、MongoDB等)中,以便后续分析或构建应用。
  5. URL管理与爬取策略

    • 爬虫还需要一个URL管理机制来跟踪已经访问过的链接,避免重复抓取,并决定接下来要抓取哪个URL,这可以通过内存、数据库或队列等方式实现。同时,爬虫还会涉及到一些高级策略,比如深度优先搜索(DFS)、广度优先搜索(BFS)、优先级队列等。
  6. 反爬与应对措施

    • 针对网站的反爬虫策略,爬虫开发者还可能需要处理cookies、session管理、验证码识别、动态加载内容等问题,甚至采用IP代理池等技术绕过访问限制。

本章节主要讲前面的第一小节:如何获取网页内容


二、 🌈http请求

在这里插入图片描述

  1. 请求行:
解析:方法类型 / 资源路径 (后面可跟查询参数)/ 协议版本
  1. 请求头
解析:域名 / 路径 ?查询参数User-Aent:用来告知服务器客户端的相关信息accept:客户端想接收的响应数据是什么类型的(文件名/类型和任意类型:*/*)
  1. 请求体
解析:存放客户端传给服务器的其他任意数据get的请求体一般是空的

三、 🌈http响应

在这里插入图片描述

  1. 状态行
解析:
协议版本 、状态码、状态消息

在这里插入图片描述

解析:
状态码和状态消息是对应的:(1)2开头的表示成功,请求已经完成处理(2)3开头的表示重定向,需要进一步的操作(3)4开头的表示客户端错误,比如请求里面有错误 或请求的资源无效等(4)5开头的表示服务器错误,比如出现问题或者正在维护
  1. 响应头
解析:
Date:生成响应的日期和时间Content-Type:返回内的类型及编码格式
  1. 响应体
解析:
html网页内容

四、 🌈教程演示

  1. 安装python第三方库requests,打开终端输入 pip install requests

在这里插入图片描述

import  requests
# 获取请求网址 https://books.toscrape.com/ ——专门用于爬虫练习的网站
response=requests.get("https://books.toscrape.com/")
print(response)
print(response.status_code) # 检验请求是否成 返回200则成功

如果输出显示的内容是200,则说明该请求成功,其他则是其他原因,具体可参考请求响应错误原因:HTTP 响应状态码

输出:
在这里插入图片描述

  1. 利用if语句判断和ok的方法,请求成功则返回网页内容(以html的格式打印输出)
import  requests
# 获取请求网址 https://books.toscrape.com/ ——专门用于爬虫练习的网站
response=requests.get("https://books.toscrape.com/")
# 利用判断语句,使用ok的方法获取网页数据
if response.ok:print(response.text) # 获取网页内容
else:print("请求失败")

输出内容:

在这里插入图片描述

五、🌈获取豆瓣top榜上前250部电影的响应内容

豆瓣网网址:https://movie.douban.com/top250

  1. 先看请求情况:
import requests
# 获取豆瓣top榜上前250部电影的响应内容
response=requests.get("https://movie.douban.com/top250")
# 查看获取响应的状态码是什么
print(response.status_code)

输出:

在这里插入图片描述

具体什么是418参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status/418

在这里插入图片描述

  1. 如何模拟浏览器的构成(请求头)

随便找一个网页,进入控制台,鼠标右键——检查或者按F12 ,网络(刷新)——随便点击一个响应——找到Request Headers里面的User-Agent,复制后面的内容写入代码中。

在这里插入图片描述

代码块:

import requests# 模拟浏览器的构成(请求头)以字典的形式存储,将复制冒号后的内容填写,
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0"
}
# 获取豆瓣top榜上前250部电影的响应内容
response=requests.get("https://movie.douban.com/top250",headers=headers)
# 查看获取响应的状态码是什么
print(response.status_code)
# 打印response的内容
print(response.text)

显示200 ,响应成功且获取信息成功

在这里插入图片描述


本章内容到此结束,谢谢大家的支持,希望本期作品可以简单帮助大家了解爬虫基础
大家一起学习呀!🔥🔥🔥🔥

相关文章:

Python 爬虫基础——http请求和http响应

写本篇文章,我认为是能把自己所理解的内容分享出来,说不定就有和我一样有这样思维的共同者,希望本篇文章能帮助大家!✨✨ 文章目录 一、 🌈python介绍和分析二、 🌈http请求三、 🌈http响应四、…...

【Hadoop】Hive导入导出数据指南

穿新衣吧 剪新发型呀 轻松一下Windows98 打扮漂亮 18岁是天堂 我们的生活甜得像糖 穿新衣吧 剪新发型呀 轻松一下Windows98 以后的路不再会有痛苦 我们的未来该有多酷 🎵 房东的猫《new boy》 Apache Hive 是一个基于Hadoop的数据仓库工具&…...

Mybatis 执行批量插入

首先,创建一个简单的 insert 语句: <insert id”insertname”>insert into names (name) values (#{value}) </insert>然后在 java 代码中像下面这样执行批处理插入: list < string > names new arraylist(); names.add(“fred”); names.add(“barney”)…...

vivado 使用基本触发器模式

使用基本触发器模式 基本触发器模式用于描述触发条件 &#xff0c; 即由参与其中的调试探针比较器组成的全局布尔公式。当“触发器模式 (Trigger Mode) ”设置为 BASIC_ONLY 或 BASIC_OR_TRIG_IN 时 &#xff0c; 即启用基本触发器模式。使用“基本触发器设置 (Basic Trig…...

Chrome 浏览器无法保存或自动填充密码

Chrome 浏览器无法保存或自动填充密码 分类 平时使用 Chrome 浏览器都会对网站的用户名密码自动填充&#xff0c;今天发现突然不行了&#xff0c;找到一个解决办法&#xff1a; 1、退出 Chrome 浏览器。2、打开 Chrome 安装目录下的的 Profile 目录&#xff0c;删除 Login Da…...

C语言面试指针辨析

1. const int *p int const *p p可以改变&#xff0c;*p不可以改变 p可以指向任意空间&#xff0c;但无法利用p修改指针空间的值 2. int *const p p不能改变&#xff0c;*p可以改变 3. const int *const p int const *const p p和*p都不能改变 4. 面试问题 将内存地址为0x2…...

YOLOV5 分类:利用yolov5进行图像分类

1、前言 之前介绍了yolov5的目标检测示例,这次将介绍yolov5的分类展示 目标检测:YOLOv5 项目:训练代码和参数详细介绍(train)_yolov5训练代码的详解-CSDN博客 yolov5和其他网络的性能对比 yolov5分类的代码部分在这 2、数据集准备 yolov5分类的数据集就是常规的摆放方式…...

Golang | Leetcode Golang题解之第16题最接近的三数之和

题目&#xff1a; 题解&#xff1a; func threeSumClosest(nums []int, target int) int {sort.Ints(nums)var (n len(nums)best math.MaxInt32)// 根据差值的绝对值来更新答案update : func(cur int) {if abs(cur - target) < abs(best - target) {best cur}}// 枚举 a…...

React添加到现有项目

1.检查现有项目的根目录下是否有package.json文件 如果没有&#xff0c;则在项目的根目录下初始化一个package.json配置文件 2.在根目录下安装react和react-dom依赖 npm install --save react react-dom react-scripts安装成功后&#xff0c;react、react-dom以及react-scr…...

java 邮件发送表格

邮件发送表格 问题导入效果图 实现方案1. 拼接HTML文件&#xff08;不推荐&#xff09;2. excel 转HTML使用工具类来转化依赖工具类代码示例 使用已工具包 如 aspose-cells依赖代码示例 3.使用模板生成流程准备模板工具类代码示例 问题导入 在一些定时任务中&#xff0c;经常会…...

鸿蒙ArkTS小短剧开源项目进行中

鸿蒙小短剧开源项目进行中 短剧项目名称&#xff1a;CCShort-TV 短剧项目名称&#xff1a;CCShort-TV 使用ArtTS语言&#xff0c;API9以上&#xff0c;HarmonyOS系统的短剧开源代码&#xff0c;使用GSYVideoPlayer作为核心播放器的小短剧。主要以ArkTS&#xff0c;ArkUI编写为…...

Go 项目依赖注入wire工具最佳实践介绍与使用

文章目录 一、引入二、控制反转与依赖注入三、为什么需要依赖注入工具3.1 示例3.2 依赖注入写法与非依赖注入写法 四、wire 工具介绍与安装4.1 wire 基本介绍4.2 安装 五、Wire 的基本使用5.1 前置代码准备5.2 使用 Wire 工具生成代码 六、Wire 核心技术5.1 抽象语法树分析5.2 …...

地推网推拉新致富是真的吗?靠谱平台揭秘

在互联网时代&#xff0c;各种平台层出不穷。为了吸引更多用户&#xff0c;这些平台常常会推出各种地推网推拉新活动。如果你懂得如何利用&#xff0c;那么你也有机会从中获得一笔不小的收入。 当然&#xff0c;在地推网推拉新赚钱的过程中&#xff0c;也需要注意一些问题。首…...

VTK使用交互器来从三维体数据中提取二维切片

VTK中鼠标消息是在交互类型对象&#xff08;interactorstyle&#xff09;中响应&#xff0c;因此通过为交互类型对象&#xff08;interactorstyle&#xff09;添加观察者&#xff08;observer&#xff09;来监听相应的消息&#xff0c;当消息触发时&#xff0c;由命令模式执行相…...

NCBI 数据下载

网上介绍的那几种直接下载NCBI数据的方法大都下载速度很慢&#xff0c;但是EBI (European Bioinformatics Institute) 下载很快&#xff0c;而且它的数据库和NCBI是共享的&#xff0c;所以我们可以直接从 EBI 下载。 1 、 确定要下载的 SRA 编号&#xff1b; 2 、 EBI (https…...

【Rust】基础语法

变量&#xff0c;基本类型&#xff0c;函数&#xff0c;注释和控制流&#xff0c;这些几乎是每种编程语言都具有的编程概念。 这些基础概念将存在于每个 Rust 程序中&#xff0c;及早学习它们将使你以最快的速度学习 Rust 的使用。 变量 首先必须说明&#xff0c;Rust 是强类…...

JVM基础:类的生命周期详解

JDK版本&#xff1a;jdk8 IDEA版本&#xff1a;IntelliJ IDEA 2022.1.3 文章目录 一. 生命周期概述二. 加载阶段(Loading)2.1 加载步骤2.2 查看内存中的对象 三. 连接阶段(Linking)3.1 连接之验证3.2 连接之准备3.3 连接阶段之解析 四. 初始化阶段(Initialization)4.1 单个类的…...

【Canvas技法】在Canvas按圆周绘制图形或是标注文字时,角度累加的方向为顺时针,起点为x轴正向

【图解说明】 【核心代码】 // 画圆弧及方向for(var i0;i<4;i){var startMath.PI/2*i;var endstartMath.PI/2;var x1180*Math.cos(start);var y1180*Math.sin(start);var x2180*Math.cos(end);var y2180*Math.sin(end);ctx.beginPath();ctx.arc(0,0,180,start,end,false);ct…...

计算机网络-TCP断开连接阶段错误应对机制

连接断开阶段 四次挥手机制&#xff1a;TCP连接的断开需要四次挥手&#xff0c;这是因为双方都需要独立地关闭数据传输。第二次和第三次挥手不能合并&#xff0c;因为在回复第二次挥手的时候&#xff0c;可能还有数据没有接收完成&#xff0c;所以需要先回复ACK报文&#xff0c…...

springboot动态使用DruidDataSource切换数据源(动态配置多个数据源)

1、添加依赖&#xff0c;在pom文件中添加 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>2.5.0</version></dependency><dependency><grou…...

P8786 [蓝桥杯 2022 省 B] 李白打酒加强版

【dfs题解】---只有50分 (头一回自己用dfs做出来了dp的hard等级的大题&#xff0c;从来没有拿50分这么高兴过哈哈哈哈哈) #include <bits/stdc.h> using namespace std; int n,m; long long ans0; const long long mol1e97; void dfs(int h,int d,int sum) {if(h<0|…...

没有网没有移动存储的情况下两台电脑如何互相传输数据

无网无移动存储情况下两台电脑数据互传探秘 一、直连网线传输数据二、局域网文件共享其他 在信息化时代的今天&#xff0c;电脑作为重要的数据处理工具&#xff0c;在日常生活和工作中扮演着不可或缺的角色。然而&#xff0c;有时我们会遇到一些特殊情况&#xff0c;如没有网络…...

如何用putty通过ssh连接ubuntu

1. 下载和安装PuTTY 访问PuTTY官网下载PuTTY的最新版本。 2. 打开PuTTY 解压下载的文件后&#xff0c;找到PuTTY文件并双击打开。 3. 配置SSH连接 在ubuntu下安装ssh服务在安装ssh时&#xff0c;我一直遇到一个问题&#xff0c;原因是我的虚拟机连不上网&#xff0c;反复实…...

java如何实现rabbitmq的消息确认机制和消息持久化机制配置和示例

在Java中&#xff0c;使用RabbitMQ的客户端库&#xff08;通常是AMQP客户端库&#xff0c;如RabbitMQ的Java客户端&#xff09;可以方便地实现消息确认机制和消息持久化机制。以下是如何实现这两个机制的示例。 1、消息确认机制 RabbitMQ支持两种类型的确认&#xff1a;生产者…...

react 组件:Suspense

允许在子组件完成加载前展示后备方案。 children&#xff1a;真正的 UI 渲染内容。如果 children 在渲染中被挂起&#xff0c;Suspense 边界将会渲染 fallback。 fallback&#xff1a;真正的 UI 未渲染完成时代替其渲染的备用 UI&#xff0c;它可以是任何有效的 React 节点。后…...

2024-4-5修改vscode的代理

今天在vs code 上面配置go环境的时候出现了以下的报错&#xff1a; 2024-04-05 16:18:00.786 [info] Installing golang.org/x/tools/goplslatest FAILED 2024-04-05 16:18:00.786 [info] { “code”: 1, “killed”: false, “signal”: null, “cmd”: “E:\Go\bin\go.exe in…...

python字符切片的规则

跟range一样有三个参数&#xff0c;分别是x:y:z&#xff0c;代表的含义分别为左边界&#xff0c;右边界&#xff08;注意该范围是左闭右开的&#xff0c;也就是说取不到右值&#xff09;和步长。 1. 切片是从左往右还是从右往左&#xff0c;看的是步长的正负&#xff0c;如果步…...

C++ 的内存安全与效率

在C编程中&#xff0c;内存安全和效率是两个至关重要的考虑因素。 内存安全涉及确保程序在分配和使用内存时不会发生错误&#xff0c;如内存泄漏、悬挂指针、越界访问、空指针解引用等&#xff1b; 效率则关注如何有效地使用内存资源&#xff0c;减少不必要的内存分配和释放操…...

Go 实战|使用 Wails 构建轻量级的桌面应用:仿微信登录界面 Demo

概述 本文探讨 Wails 框架的使用&#xff0c;从搭建环境到开发&#xff0c;再到最终的构建打包&#xff0c;本项目源码 GitHub 地址&#xff1a;https://github.com/mazeyqian/go-run-wechat-demo 前言 Wails 是一个跨平台桌面应用开发框架&#xff0c;他允许开发者利用 Go …...

c++取经之路(其五)——类和对象拷贝构造函数

概念&#xff1a;拷贝构造函数&#xff0c;只有单个形参&#xff0c;该形参是对本类类型对象的引用(一般常用const修饰)&#xff0c;在用已存在的类类型对象创建新对象时由编译器自动调用。 特征&#xff1a; 1. 拷贝构造函数是构造函数的一个重载形式 如&#xff1a; 2. 拷贝…...