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 ,响应成功且获取信息成功

在这里插入图片描述


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

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

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

相关文章

初识MySQL(中篇)

使用语言 MySQL 使用工具 Navicat Premium 16 代码能力快速提升小方法,看完代码自己敲一遍,十分有用 目录 1.SQL语言 1.1 SQL语言组成部分 2.MySQL数据类型 2.1 数值类型 2.2 字符串类型 2.3 日期类型 3.创建数据表 3.1 创建数据表方法1 …

00-JAVA基础-注解及反射解析注解

注解 什么是注解 Java 注解(Annotation)是 JDK 5.0 引入的一种元素,用于为 Java 代码提供元数据。元数据是关于数据的数据,它为代码提供附加信息,而这些信息并不直接参与到程序的逻辑中,但可以被编译器或…

如何根据黄金行情进行交易操作?

根据黄金行情进行交易操作是许多投资者关注的重要议题,黄金作为一种重要的避险资产和投资工具,其价格波动受多种因素影响,包括经济数据、地缘政治风险、货币政策等。为了有效地进行黄金交易操作,投资者需要综合考虑多方面因素&…

ST表---算法

相当于二分的思想,一直比较最值 ST的创建 现在创建成功,是应该如何查询的问题 ST表的查询 虽然这两区间有重叠,但是可以一个往前数,一个往后数,互不影响 时间复杂度 创建st表的复杂度为n*logn 使用时的复杂度为O(…

ROS 2边学边练(12)-- 创建一个工作空间

上一篇我们已经接触过工作空间的概念,并简单了解体验了一点构建包、测试包的流程,此篇会深入一点学习工作空间相关内容。 前言 一个工作空间是包含了ROS 2的功能包的目录(文件夹),在使用ROS 2之前我们得激活一下目标工…

【信号与系统 - 1】周期信号的傅里叶级数展开

1 傅里叶级数展开的定义 已知:一个周期信号 f ( t ) f(t) f(t) 是一个直流分量(幅度为 c 0 c_0 c0​)加上一序列余弦信号分量( w 0 w_0 w0​基波分量和与之成谐波关系的k次谐波分量 k w 0 kw_0 kw0​)经过加权求和得到…

高并发场景下分布式事务处理方案探讨及代码实现

本文将深入探讨高并发场景下,分布式事务处理的方案。随着互联网的快速发展,对系统性能和稳定性的需求也日益增长,尤其在高并发场景下,分布式事务成为重中之重。在本文中,我将分享我对分布式事务的理论理解,…

多线程重点知识(个人整理笔记)

目录 1. java 多线程 1.1. 什么是进程?什么是线程? 1.1.1. 进程 1.1.2. 线程 1.1.3. 多线程 2. 并行和并发有什么区别? 3. 守护线程是什么? 4. 创建线程有哪几种方式? 4.1. 线程的常见成员方法 5. 线程安全问题 5.1. synchronize…

39.基于SpringBoot + Vue实现的前后端分离-无人智慧超市管理系统(项目 + 论文PPT)

项目介绍 随着互联网时代的发展,传统的线下管理技术已无法高效、便捷的管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,国家在环境要求不断提高的前提下,无人智慧超市管理系统建设也逐渐进入了信…

Spring Boot | Spring Boot的“数据访问“、Spring Boot“整合MyBatis“

目录: 一、Spring Boot”数据访问概述“二、Spring Boot”整合MyBatis”1. 基础环境搭建 (引入对应的“依赖启动器” 配置数据库的“相关参数”)① 数据准备 (导入Sql文件)② 创建项目,引入相应的启动器,编写数据库对应的“实体类”③额外添加pom.xml文…

尚硅谷50道Java面试题笔记 写的不全

b站链接:https://www.bilibili.com/video/BV1Bb411d7SL/?p4&vd_source714a8042f058b82c668750a0930ff9b0 1 mysql使用innodb引擎,请简述mysql索引的最左前缀如何优化orderby语句。 关键点: 如果排序字段不在索引列上,file…

Filter Listener Interceptor

文章目录 第一章 Filter1. 目标2. 内容讲解2.1 Filter的概念2.2 Filter的作用2.3 Filter的入门案例2.3.1 案例目标2.3.2 代码实现2.3.2.1 创建ServletDemo012.3.2.2 创建EncodingFilter 2.4 Filter的生命周期2.4.1 回顾Servlet生命周期2.4.1.1 Servlet的创建时机2.4.1.2 Servle…

趣学前端 | 类,我想好好继承它的知识点

背景 最近睡前习惯翻会书,重温了《JavaScript权威指南》。这本书,文字小,内容多。两年了,我才翻到第十章。因为书太厚,平时都充当电脑支架。 JavaScript 类 话说当年类、原型、继承,差点给我绕晕。 在J…

Excel、PowerQuery 和 ChatGPT 终极手册(下)

原文:Ultimate ChatGPT Handbook for Enterprises 译者:飞龙 协议:CC BY-NC-SA 4.0 使用 SUMIFS、SUMPRODUCT、AGGREGATE 和 MAX 函数查找数值数据 其中之一鲜为人知的事实是,当查找单个数值时,匹配和三角函数可能比查…

软考--软件设计师(软件工程总结1)

目录 1.定义 2.软件生存周期 3.软件过程(即软件开发中遵循的一系列可预测的步骤) ​编辑4.软件开发模型 5.需求分析(软件需求分析,系统需求分析或需求分析工程) 6. 需求工程 7.系统设计 8.系统测试 1.定义 软件…

Android Studio学习9——使用Logcat打印日志

在Android开发中,Logcat是一个工具,它允许开发者查看设备或模拟器的日志信息。开发者可以使用Log类来打印日志信息,这对于调试和错误排查非常有帮助。 v 或 verbose: 最低等级,显示所有消息。d 或 debug: 用于调试消息。i 或 info…

在集群中使用deepspeed如果端口被占用可以使用deepspeed参数更改

在集群中使用deepspeed如果端口被占用可以使用deepspeed参数更改 这一次G老师不好使了 在集群中使用deepspeed默认的端口号29500被占用,显示更改居然不起作用 G老师给的方法也不好使 #!/bin/bash MASTER_ADDRlocalhost MASTER_PORT29501 # 选择一个未被占用的端…

Qt | 发布程序(以 minGW 编译器为例)

1、注意:修改 pro 文件后,最好执行“构建”>“重新构建项目”,否则 pro 文件的更改将不会反应到程序上。 2、发布程序的目的:就是让编译后生成的可执行文件(如 exe 文件),能在其他计算机上运行。 一、编译后生成的各种文件简介 Qt Creator 构建项目后产生的文件及目录…

SCI一区 | Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型…

鸿蒙原OS开发实例:【ArkTS类库单次I/O任务开发】

Promise和async/await提供异步并发能力,适用于单次I/O任务的场景开发,本文以使用异步进行单次文件写入为例来提供指导。 实现单次I/O任务逻辑。 import fs from ohos.file.fs; import common from ohos.app.ability.common;async function write(data:…