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

爬虫原理详解及requests抓包工具用法介绍

文章目录

  • 一、什么是爬虫?
  • 二、爬虫的分类
  • 三、网址的构成
  • 四、爬虫的基本步骤
  • 五、动态页面和静态页面
  • 六、伪装请求头
  • 七、requests库介绍
    • 1. 概念:
    • 2. 安装方式(使用镜像源):
    • 3. 基本使用:
    • 4. response对象对应的方法:

一、什么是爬虫?

通俗讲:爬虫就是解放人的双手,去互联网获取数据,保存数据到本地或者数据库,保存格式如常见的txt、excel、csv、pdf、zip、jpg、mp3、mp4等等。

本质:爬虫本质是模拟浏览器,向服务器发送网络请求,接受服务器放回的数据,保存数据。

二、爬虫的分类

  1. 通用爬虫:比如百度、Google、搜狗等搜索引擎。
  2. 聚焦爬虫:根据指定的目标网址,获取精准的价值数据,并保存数据。

三、网址的构成

爬虫既然是模拟浏览器对网址发起请求,那先给大家介绍一下网址的构成。

以该网址为例:https://www.baidu.com/s?ie=UTF-8&wd=python

  • 协议部分:https为协议部分,全称为超文本传输安全协议,与之对应的还有http协议。两者区别是http是明文传输、https是密文传输,后者安全性更高。
  • 域名部分:域名又称为主机名,通过域名就可以找到对应的这台服务器或者主机。域名本质是IP地址,比如访问www.baidu.com,其实访问的是某个IP地址。只是IP地址是一串数字,不便记忆,所以通过特殊的方式将IP地址转换为域名。
  • 路径部分:我们访问某个服务器的信息,比如百度的服务器,其实就是拿到服务器上面某个文件夹里面的数据。类似于我们电脑一样,服务器上面也有众多文件夹,每个文件夹里面还有下级目录,一层嵌套一层,这就称为路径部分。路径在网址中是以“/”分隔开的,以上述网址为例:路径就是/s。如果有多级目录,就是多个/分隔。
  • 参数部分:参数就是我们访问网站的时候传递的关键字,比如我们要访问百度服务器中图片里面的风景图片,那请求的时候就要带上参数。参数和路径之间用“?”隔开,如果传递多个参数,每个参数之间用“&”地址符连接。如上网址中,ie=UTF-8和wd=python就是传递的两个参数,中间用“&”连接。

四、爬虫的基本步骤

  1. 准备网址:https://www.baidu.com/s?ie=UTF-8&wd=python。
  2. 请求网址:获取网站数据。
  3. 解析数据:解析价值数据。
  4. 保存数据:数据保存。

五、动态页面和静态页面

做爬虫项目时,首先要做的就是查看当前网站是静态页面还是动态页面,因为静态页面的数据是在当前页面的源码里面,而动态页面数据不在当前源码,一般是在另外的JS文件中存放。那如何区分网页是动态还是静态页面呢?

  1. 打开浏览器。
  2. 访问网址。
  3. 网页空白处右键点击,查看页面源代码。
  4. 在网页源代码中搜索网页所展示的部分,如果源码中都有,则为静态页面,否则是动态页面。

六、伪装请求头

多数网站对于爬虫技术是有限制的,并不希望爬虫去访问他的数据,一则是爬虫访问速率太快,容易造成网站负载超荷;二是爬虫并不是真实用户,对于网站经营数据的分析和决策会造成干扰;因而网站会出台各种手段限制爬虫,而如果要使用爬虫技术,则就要突破这些限制,也就是反爬。常用反爬措施有:

  1. 浏览器标识:我们访问任何网站,一般都是通过电脑或者手机,使用浏览器来访问,这样对方服务器就可以看到我们的设备型号以及浏览器型号,比如通过Windows系统的电脑上的谷歌浏览器去访问某服务器,对方就可以检测到我们的设备操作系统类型及浏览器版本类型等参数,确定了是真实浏览器发送的请求才会给到数据。而爬虫直接访问的话,对方会检测到,所以我们要将自己伪装成浏览器发起请求,也就是将用户代理(user-agent)的值改为浏览器型号。
  2. 反爬字段:上面我们说过,爬虫是模拟浏览器直接请求网址的,也就是给到他指定的网址,就可以对该网址发起请求。比如我们访问淘宝之后搜索某商品,然后点开其中一个商品,需要抓取这个商品相关的信息。那就将该商品页面网址复制下来,然后用爬虫请求。但是这样是拿不到数据的,很简单,因为正常人去看到这个商品页面,肯定是首先打开淘宝,搜索商品之后,继而点击该商品才可以看到。而爬虫直接就访问了该网址,很明显是反常的。所以网站有专门的反爬字段来检测,这个字段是referer,也就是来源的意思,访问的网址页面是来源于哪里,比如该商品页面是来源于淘宝,那就一定要携带referer字段,值为淘宝网址。如果不携带该字段,则拿不到数据。
  3. cookies:cookies就是用户登录后,服务器返回给用户的标识信息,在一定时间内,用户再次访问该网站,不需要登录就可以看到登录后的数据。比如我们访问淘宝,要查看购物车中商品信息,则需要输入用户名和密码登录,登录后则可看到购物车数据。登录之后,一段时间内不要再次登录,也可以随时看到购物车信息,因为我们之后的每次访问都是携带了第一次登录后,服务器返回给我们的cookies身份标识,故而不用每次都输入用户名密码登录。做爬虫项目时,我们也会经常遇到需要登录的网站,登录一次之后拿到cookies值,将该cookies保存下来,之后每次访问时候携带上即可。

注意:任何爬虫项目都不得对网站运营造成影响,否则等同于服务器攻击。所以在写爬虫项目时,一定要对爬虫抓取频率和抓取数量加以限制。

七、requests库介绍

1. 概念:

requests是非常强大的爬虫请求库,可以解决日常90%的爬虫需求

2. 安装方式(使用镜像源):

pip install requests -i https://mirrors.aliyun.com/pypi/simple/

3. 基本使用:

  1. 导包:import requests
  2. 使用:response = requests.get(url, 反爬请求头)
    注意:请求拿到的response是一个对象,不是网站原始数据,response对象有众多属性和方法。

代码示例如下图所示:

在这里插入图片描述

4. response对象对应的方法:

  1. 获取网页源代码,有两种方法:A、text    B、content.decode()
    代码示例如下图所示:

在这里插入图片描述

  1. 获取二进制数据【音乐、视频、图片】:response.content
    代码示例如下图所示:

在这里插入图片描述

  1. 获取响应状态码【基本不用】:response.status_code,状态码是200表示请求成功
    代码示例如下图所示:

在这里插入图片描述

  1. 获取json数据【常用】:response.json(),网站数据很多都是json数据,拿到数据需要将json转化为字典
  2. 获取请求头headers:response.request.headers,可以查看我们发送给网站的请求头信息
    代码示例如下图所示:
    在这里插入图片描述
  3. 获取响应头headers:response.headers,可以看到网站返回的响应头信息
    代码示例如下图所示:
    在这里插入图片描述

相关文章:

爬虫原理详解及requests抓包工具用法介绍

文章目录 一、什么是爬虫?二、爬虫的分类三、网址的构成四、爬虫的基本步骤五、动态页面和静态页面六、伪装请求头七、requests库介绍1. 概念:2. 安装方式(使用镜像源):3. 基本使用:4. response对象对应的方…...

tinkerCAD案例:31. 3D 基元形状简介

tinkerCAD案例:31. 3D 基元形状简介 1 将一个想法从头脑带到现实世界是一次令人兴奋的冒险。在 Tinkercad 中,这将从一个新的设计开始。 在新设计中,简单的原始形状可以通过不同的方式组合成更复杂的形状。 在这个项目中,你将探索…...

Vue2基础一、快速入门

零、文章目录 Vue2基础一、快速入门 1、Vue 概念 (1)为什么学 前端必备技能 岗位多,绝大互联网公司都在使用Vue 提高开发效率 高薪必备技能(Vue2Vue3) (2)Vue是什么 **概念:…...

【POJ-3279】Fliptile(递推+搜索)

POJ-3279. Fliptile(递推搜索) Vjudge链接 题目描述 农场主约翰知道,一头智力得到满足的奶牛是一头快乐的奶牛,它会产更多的奶。他为奶牛安排了一项脑力活动,让它们摆弄一个 M N M N MN 的方格 ( 1 ≤ M ≤ 15 …...

522个matplotlib绘图案例,包含:折线图、散点图、条形图、饼图、直方图、3D图等,源码可直接运行!

文章目录 matplotlib介绍图表介绍折线图(Line Plot)散点图(Scatter Plot)条形图(Bar Plot)饼图(Pie Chart)直方图(Histogram)箱线图(Box Plot&…...

windows安装Elasticsearch8.9.0

官网解压安装好路径(非中文,无空格) 可参考 言之有李LAX csdn http://t.csdn.cn/S2oju本人使用jdk17 修改配置elasticsearch.yml xpack.security.enabled: false xpack.security.http.ssl:enabled: false直接点击bin\elasticsearch.bat…...

用Delphi编写一个通用视频转换工具,让视频格式转换变得更简单

用Delphi编写的简单视频格式转换程序,它使用TComboBox、TOpenDialog和TSaveDialog组件来选择转换格式、选择源视频文件和选择目标视频文件。程序还使用TEdit组件允许用户输入参数,然后将这些组件中的信息拼接成转换命令并在DOS窗口中运行它。 procedure…...

Kafka系列之:安装Know Streaming详细步骤

Kafka系列之:安装Know Streaming详细步骤 一、相关技术博客二、安装elasticsearch1.下载elasticsearch2.创建数据目录3.创建es用户4.修改最大文件数5.解压elasticsearch6.赋予es用户目录权限7.修改es配置8.切换es用户启动elasticsearch三、安装KnowStreaming1.下载KnowStreami…...

绝杀 GETPOST 嵌套的 JSON 参数

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web应用程序中的数据传输。在HTTP数据包信息传递时,JSON扮演着非常正常的角色,因为它是一种通用的数据格式,可以被多种编程语言和应用程…...

Spring 项目过程及如何使用 Spring

文章目录 1.创建 Spring 项目步骤1.1 创建 Maven 项目1.2添加 Spring 框架支持1.3 添加启动项2.如何使用 Spring2.1 存储 Bean 对象2.1.1 创建 Bean对象2.1.2 将 Bean对象注册到容器中 2.2 获取并使用 Bean对象2.2.1 使用 ApplicationContext 获取对象2.2.2 使用 BeanFactory 获…...

信息学奥赛一本通——1258:【例9.2】数字金字塔

文章目录 题目【题目描述】【输入】【输出】【输入样例】【输出样例】 AC代码 题目 【题目描述】 观察下面的数字金字塔。写一个程序查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以从当前点走到左下方的点也可以到达右下方的点。 在上面…...

selenium官网文档阅读总结(day 2)

1.selenium元素定位方法 1.1selenium命令 当我们使用chormdriver打开网页后,接下来就要用python操作元素,模拟用户会作出的操作,这些操作元素的方法就是命令。比如 (1) click:点击(按钮,单选框&#xff…...

VMware虚拟机安装VMware tools

一、挂载光驱 执行以下命令来创建 /mnt/cdrom 目录: mkdir -p /mnt/cdrom-p 参数会确保如果 /mnt/cdrom 的上级目录(例如 /mnt)不存在的话也会被创建。 然后,你可以再次尝试挂载光盘: mount /dev/sr0 /mnt/cdrom这次…...

【Linux命令200例】rm用来删除文件或目录(谨慎使用)

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆本文已收录于专栏:Linux命令大全。 🏆本专栏我们会通过具体的系统的命令讲解加上鲜…...

行云管家荣获CFS第十二届财经峰会 “2023产品科技创新奖”

7月26日至27日,CFS第十二届财经峰会暨2023可持续商业大会在京盛大召开。峰会主题为“激活高质量发展澎湃活力”,超1000位政商领袖、专家学者、企业及媒体代表出席了本次盛会,共同分享新技术新产品新趋势、研判全球新挑战与新变局下企业的机遇…...

uniapp禁止页面滚动

用 touchmove.stop.prevent“moveHandle”&#xff0c;moveHandle 可以用来处理 touchmove 的事件&#xff0c;也可以是一个空函数。 <viewclass“mask” touchmove.stop.prevent“moveHandle”>...

ModuleNotFoundError: No module named ‘_sqlite3‘

前言 遇到报错信息如下&#xff1a; ModuleNotFoundError: No module named _sqlite3解决方式 参考解决方式&#xff1a; https://blog.csdn.net/jaket5219999/article/details/53512071 find / -name _sqlite*.socp /usr/lib64/python3.6/lib-dynload/_sqlite3.cpython-36…...

Rust的入门篇(下)

这篇博客是rust入门篇下 45. 生命周期注释 // 生命周期// 下面代码不能通过编译 // longer 函数取 s1 和 s2 两个字符串切片中较长的一个返回其引用值 // 返回值引用可能会返回过期的引用 // fn longer(s1: &str, s2: &str) -> &str { // if s2.len() >…...

PYTHON-logging-工具类-支持中文字符控制台输出和文件写入-不会导致乱码

import logging import sys import os import time from logging.handlers import RotatingFileHandler import iodef get_logger(tag):# 创建一个新的输出流&#xff0c;并指定编码为UTF-8sys.stdout io.TextIOWrapper(sys.stdout.buffer, encodingutf-8)accPath logsif not…...

对gpt的简单认识

1.gpt是什么&#xff1f; GPT&#xff08;Generative Pre-trained Transformer 生成式预训练Transformer模型&#xff09;是一种基于Transformer架构的预训练语言模型&#xff0c;由OpenAI开发。GPT模型以无监督学习的方式使用大规模语料库进行预训练&#xff0c;并具有生成文…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析

MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录&#xff0c;这个目录下存放着许多可执行文件。与其他系统的可执行文件类似&#xff0c;这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中&#xff0c;用…...