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

爬虫基本知识的认知(爬虫流程 HTTP构建)| 爬虫理论课,附赠三体案例

爬虫是指通过程序自动化地从互联网上获取数据的过程。
基本的爬虫流程可以概括为以下几个步骤:

  1. 发送 HTTP 请求:通过 HTTP 协议向指定的 URL 发送请求,获取对应的 HTML 页面。
  2. 解析 HTML 页面:使用 HTML 解析器对获取的 HTML 页面进行解析,提取出需要的数据。
  3. 存储数据:将解析出来的数据存储到本地或者数据库中,以供后续分析或使用。

HTTP 协议是爬虫获取数据的基础,爬虫程序需要构造 HTTP 请求,发送到目标服务器,获取数据并进行解析。
HTTP 请求主要由请求头请求体组成:

  • 请求头包含请求方法、目标 URL、HTTP 版本号以及请求头信息等;
  • 请求体则是携带了请求参数和请求数据。

在构造 HTTP 请求时,需要注意目标网站可能会对爬虫进行限制,如设置反爬虫机制,通过增加请求头中的 User-Agent 字段、设置请求时间间隔、使用代理 IP 等方式可以降低被限制的风险。

文章目录

    • HTTP 协议介绍
    • http 协议 请求行,请求头,请求体
    • HTTP 协议响应

HTTP 协议介绍

HTTP(HyperText Transfer Protocol)是一种应用层协议,用于在客户端和服务器之间传输超文本数据。
HTTP 协议是一个基于请求-响应模型的协议,客户端发送 HTTP 请求到服务器,服务器返回 HTTP 响应。

HTTP 请求由三部分组成:请求行请求头请求体

  • 请求行包括请求方法、URL 和 HTTP 版本号;
  • 请求头包括一些关于请求的元数据,比如 User-Agent、Cookie 等;
  • 请求体则包含请求的数据。

HTTP 响应也由三部分组成:状态行响应头响应体

  • 状态行包括响应的状态码和状态文本;
  • 响应头包括一些关于响应的元数据,比如 Server、Content-Type 等;
  • 响应体则包含响应的数据。

下面是一个简单的使用 Python 发送 HTTP GET 请求的例子:

import requestsurl = 'http://pachong.vip'
response = requests.get(url)
print(response.status_code)  # 打印状态码
print(response.headers)  # 打印响应头
print(response.text)  # 打印响应体

上面的代码使用 requests 库发送一个 HTTP GET 请求到 pachong.vip,并输出了状态码、响应头和响应体。
requests 库是 Python 中用于发送 HTTP 请求的常用库,它提供了简单易用的 API,可以轻松地发送 HTTP 请求并处理 HTTP 响应。

写python爬虫,你永远绕不过去代理问题

http 协议 请求行,请求头,请求体

HTTP 请求可以分为三部分:请求行、请求头和请求体

如果 HTTP 协议是一部动漫的话,请求行就相当于开头的标题,请求头就相当于主演的演员表,请求体就是动漫的具体内容。

请求行包含三个部分,分别是请求方法、请求 URL 和 HTTP 协议版本。

把请求行想象成向一个迷路的人询问路线的场景,请求方法就是你说的话,“请问去哪里”请求 URL 就是你想去的目的地,“我要去机场”,HTTP 协议版本就是你们沟通的语言,“用中文交流”

请求头可以包含多个键值对,用来传递请求的附加信息,比如 User-Agent、Referer 等。

把请求头想象成你在约会时候的小手册,里面包含了你的身份、约会地点等信息。如果你带上了自己的照片,那么 User-Agent 就相当于照片里的头像,是你的标识;Referer 就相当于你约会时对方提供的位置,让你更清楚地了解约会地点的信息。

请求体是 POST 请求中传递参数的部分

把请求体想象成你向对象表白时的话语,里面包含了你的真心话。比如你向喜欢的人表白时说的“我喜欢你”,这句话就相当于请求体中的内容。

如果你使用 Python 发送 HTTP 请求,可以使用 requests 库。下面是一个例子,访问爬虫训练场

import requestsurl = "http://pachong.vip"
response = requests.get(url)print(response.content)

HTTP 协议响应

当我们使用 Python 进行网络爬取时,经常需要通过 HTTP 请求来获取服务器返回的数据。而服务器返回的响应通常也是由三部分组成:状态行、响应头和响应体。

下面是一个用 Python 模拟发送 HTTP 请求,并获取响应的示例代码:

import requests# 发送 HTTP 请求
response = requests.get('https://pachong.vip')# 获取响应状态行
status_line = response.status_code# 获取响应头
headers = response.headers# 获取响应体
content = response.textprint(f'响应状态行:{status_line}')
print(f'响应头:{headers}')
print(f'响应体:{content}')

这个代码中,使用 Python 的 requests 库来发送 HTTP 请求,获取了服务器返回的响应。
然后通过 response.status_code、response.headers 和 response.text 分别获取了响应的状态行、响应头和响应体,并将它们打印输出。

如果将这个场景生活化,例子如下。

  • 我们请求了三体的官网,服务器给你回了一份响应,这份响应分为三个部分,就像是三体人对你的回答。

  • 第一条是状态行,相当于三体人告诉你了这个回答的状态,比如是成功还是失败。就像是三体人告诉你他们有没有你想要的技术。

  • 第二条是响应头,相当于三体人告诉你一些额外的信息,比如他们的地址、星球坐标等等,就像是三体人告诉你一些和技术无关但是你也需要知道的信息。

  • 第三条响应体,相当于三体人给你展示了他们的星球,比如是充满火或者是充满水的图片。

当你收到这份响应之后,你可以根据里面的信息决定接下来该怎么做,是继续呆着还是逃跑。

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 1122 篇原创博客

从订购之日起,案例 5 年内保证更新

  • ⭐️ Python 爬虫 120,点击订购 ⭐️
  • ⭐️ 爬虫 100 例教程,点击订购 ⭐️

相关文章:

爬虫基本知识的认知(爬虫流程 HTTP构建)| 爬虫理论课,附赠三体案例

爬虫是指通过程序自动化地从互联网上获取数据的过程。 基本的爬虫流程可以概括为以下几个步骤: 发送 HTTP 请求:通过 HTTP 协议向指定的 URL 发送请求,获取对应的 HTML 页面。解析 HTML 页面:使用 HTML 解析器对获取的 HTML 页面…...

Ubuntu20.04如何安装虚拟机(并安装Android)

安装虚拟机(KVM)这种KVM只能安装windows无法安装安卓(From https://phoenixnap.com/kb/ubuntu-install-kvm)A type 2 hypervisor enables users to run isolated instances of other operating systems inside a host system. As a Linux based OS, Ubun…...

【腾讯一面】我对我的Java基础不自信了

我对我的Java基础不自信了1、List和set的区别?2、HashSet 是如何保证不重复的3、HashMap是线程安全的吗,为什么不是线程安全的?4、HashMap的扩容过程5、Java获取反射的三种方法6、Redis持久化机制原理7、redis持久化的方式各有哪些优缺点1、L…...

前端都在聊什么 - 第 2 期

Hello 小伙伴们早上、中午、下午、晚上、深夜好,我是爱折腾的 jsliang~「前端都在聊什么」是 jsliang 日常写文章/做视频/玩直播过程中,小伙伴们的提问以及我的解疑整理。本期对应 2023 年的 01.16-01.31 这个时间段。本期针对「规划」「工作」「学习」「…...

每天一道大厂SQL题【Day11】微众银行真题实战(一)

每天一道大厂SQL题【Day11】微众银行真题实战(一) 大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题&…...

Cosmos 基础教程(一) -- 不可不知的开发术语

CometBFT DOC 您可以在本节中找到几个技术术语的概述,包括每个术语的解释和进一步资源的链接——在使用Cosmos SDK进行开发时,所有这些都是必不可少的。 在本节中,您将了解以下术语: Cosmos and Interchain LCD RPC Protobuf -协议缓冲…...

JAVA JDK 常用工具类和工具方法

目录 Pair与Triple Lists.partition-将一个大集合分成若干 List集合操作的轮子 对象工具Objects 与ObjectUtils 字符串工具 MapUtils Assert断言 switch语句 三目表达式 IOUtils MultiValueMap MultiMap JAVA各个时间类型的转换(LocalDate与Date类型&a…...

Spring Bean循环依赖

解决SpringBean循环依赖为什么需要3级缓存?回答:1级Map保存单例bean。2级Map 为了保证产生循环引用问题时,每次查询早期引用对象,都拿到同一个对象。3级Map保存ObjectFactory对象。数据结构1级Map singletonObjects2级Map earlySi…...

Hive 2.3.0 安装部署(mysql 8.0)

Hive安装部署 一.Hive的安装 1、下载apache-hive-2.3.0-bin.tar.gz 可以自行下载其他版本:http://mirror.bit.edu.cn/apache/hive/ 2.3.0版本链接:https://pan.baidu.com/s/18NNVdfOeuQzhnOHVcFpnSw 提取码:xc2u 2、用mobaxterm或者其他连接…...

IPD术语表

简称英文全称中文ABPannual business plan年度商业计划ABCactivity -based costing基于活动的成本估算ABMactivity -based management基于活动的管理ADCPavailability decision check point可获得性决策评审点AFDanticipatory failure determination预防错误决定AMEadvanced ma…...

目标检测损失函数 yolos、DETR为例

yolos和DETR,除了yolos没有卷积层以外,几乎所有操作都一样。 HF官方文档 因为目标检测模型,实际会输出几百几千个“框”,所以损失函数计算比较复杂。损失函数为偶匹配损失 bipartite matching loss,参考此blog targe…...

linux系统编程2--网络编程socket

在linux系统编程中网络编程是使用socket(套接字),socket这个词可以表示很多概念:在TCP/IP协议中,“IP地址TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址端口号”就称为socket。在TCP协议中&#…...

FPGA纯Verilog实现任意尺寸图像缩放,串口指令控制切换,贴近真实项目,提供工程源码和技术支持

目录1、前言2、目前主流的FPGA图像缩放方案3、本方案的优越性4、详细设计方案5、vivado工程详解6、上板调试验证并演示7、福利:工程源码获取1、前言 代码使用纯verilog实现,没有任何ip,可在Xilinx、Intel、国产FPGA间任意移植; 图…...

华为OD机试题 - 最长合法表达式(JavaScript)| 代码+思路+重要知识点

最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - 整数分解(JavaScript) 华为OD机试题 - 单词反转(JavaScript) 使用说明 参加华为od机试,一定要注意不要完全背…...

L1-005 考试座位号

L1-005 考试座位号 每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试…...

Obsidian + remotely save + 坚果云:实现电脑端和手机端的同步

写在前面:近年来某象笔记广告有增无减,不堪其扰,便转投其它笔记,Obsidian、OneNote、Notion、flomo都略有使用,本人更偏好obsidian操作简单,然其官方同步资费甚高,囊中羞涩,所幸可通…...

对比学习MoCo损失函数infoNCE理解(附代码)

MoCo loss计算采用的损失函数是InfoNCE: ​​ 下面是MoCo的伪代码,MoCo这个loss的实现就是基于cross entropy loss。 将k作为q的正样本,因为k与q是来自同一张图像的不同视图;将queue作为q的负样本,因为queue中含有大量…...

logd守护进程

logd守护进程1、adb logcat命令2、logd守护进程启动2.1 logd文件目录2.2 main方法启动3、LogBuffer缓存大小3.1 缓存大小优先级设置3.2 缓存大小相关代码位置android12-release1、adb logcat命令 命令功能adb bugreport > bugreport.txtbugreport 日志adb shell dmesg >…...

【汽车雷达通往自动驾驶的关键技术】

本文编辑:调皮哥的小助理 现代汽车雷达装置比手机还小,能探测前方、后方或侧方的盲点位置是否存在障碍物,但这还不百分之百实现全自动驾驶的。传统的汽车雷达分辨率都不高,只能“看到”一团东西,可以检测到汽车周围存在…...

2023实习面经

实习面经 秋招笔试面试全记录 字节-电商 字节实习一面: 二分类的损失函数是什么,怎么算?多分类的损失函数怎么算?如果文本分类的标签有多个,比如一个文本同时属于多个label那怎么办?如果文本分类里面的…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

如何在网页里填写 PDF 表格?

有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据&#xff…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...