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

news2024/9/20 22:43:55

文章目录

  • 一、什么是爬虫?
  • 二、爬虫的分类
  • 三、网址的构成
  • 四、爬虫的基本步骤
  • 五、动态页面和静态页面
  • 六、伪装请求头
  • 七、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,可以看到网站返回的响应头信息
    代码示例如下图所示:
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一起学算法(数组篇)

1.概念: 1.顺序存储 顺序存储结构,是指用一段地址连续的存储单元来依次存储结构,如图所示,每个蓝色方块都对应了数组中的一个数据,数据有类型,例如:32位整型int、单精度浮点型float、双精度浮点…

你知道HTTP与HTTPS有什么区别吗?

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 一、什么是HTTP? 二、什么是HTTPS? 三、HTTPS 的工作原理 1、客户端发起 HTTPS 请求 2、服务端的配置 3、…

如何设计一个Android端高性能日志监控系统

开发中客户端经常遇到一些线上问题, 无法复现, 但是又的的确确存在; 当线上反馈的时候无从下手; 主要是因为并不知道用户所处的环境,以及所做的操作顺序或者程序运行的顺序; 在排查问题和复现问题上占用了很大的成本; 如果debug时的log日志如果线上也能查看就好了; 基于此, 我们…

5.类型推论,类型断言,类型兼容性

目录 1 类型推论 2 类型断言 2.1 类型推论所带来的问题 2.2 基本使用 2.3 不断言会出现的问题 2.4 断言的另一种写法 2.5 查看DOM元素的类型 3 类型兼容性 3.1 类兼容性 3.2 接口兼容性 3.2.1 接口之间的兼容性 3.2.2 接口与类之间的兼容性 3.3 函数…

C++ 类的静态成员

在结构化程序设计中程序模块的基本单位是函数,因此模块间对内存中数据的共享是通过函数与和函数之间的数据共享来实现的,其中包括两个途径——参数传递和全局变量。 面向对象的程序设计方法兼顾数据的共享和保护,将数据与操作数据的函数封装…

解决运行flutter doctor --android-licenses时报错

问题描述: 配置flutter环境时,会使用flutter doctor命令来检查运行flutter的相关依赖是否配好。能看到还差 Android license status unknown.未解决。 C:\Users\ipkiss.wu>flutter doctor Flutter assets will be downloaded from https://storage.…

【MySQL】数据库的增删查改+备份与恢复

文章目录 一、创建数据库create二、数据库所使用的编码2.1 查询字符集和校验集2.2 指定编码创建数据库2.3 不同的校验集对比 三、删除数据库drop四、查看数据库show五、修改数据库alter六、数据库的备份与恢复6.1 备份 mysqldump6.2 恢复source6.3 仅备份几张表或备份多个数据库…

互联网宠物医院开发:宠物健康护航的新选择

随着人们对宠物的关注度逐渐提高,宠物医疗服务也得到了更多的关注和需求。而互联网宠物医院作为一种新兴的医疗服务形式,正以其独特的优势和便捷性受到越来越多宠物主人的青睐。   首先,互联网宠物医院的最大优势在于提供了便捷的服务。宠物…

寻找峰值——力扣162

文章目录 题目描述法一 寻找最大值法二 二分法 题目描述 法一 寻找最大值 int findPeakElement(vector<int>& nums){return max_element(nums.begin(), nums.end()) - nums.begin();}法二 二分法 int findPeakElement(vector<int>& nums) {int l 0, r n…

onnx模型的保存与使用

1 onnx模型的保存 在网络训练结束之后&#xff0c;通常会将模型的权重参数保存到.pth或.pt文件中&#xff0c;如果部署环境中有pytorch&#xff0c;那么直接新建一个模型类对象&#xff0c;然后导入权重参数即可&#xff0c;但如果部署环境中只有OpenCV&#xff0c;没有pytorc…

融合大数据、物联网和人工智能的智慧校园云平台源码 智慧学校源码

电子班牌系统用以展示各个班级的考勤信息、授课信息、精品课程、德育宣传、班级荣誉、校园电视台、考场信息、校园通知、班级风采&#xff0c;是智慧校园和智慧教室的对外呈现窗口&#xff0c;也是学校校园文化宣传和各种信息展示的重要载体。将大数据、物联网和人工智能等新兴…

27岁到来之际,我在阿里实现了年薪30W+的小目标

毕业快 5 年了&#xff0c;每当和人聊起自己的职场飞升之路&#xff0c;都不由得感激当初果断逃离舒适圈的自己。出身一所非 211、985 院校&#xff0c;毕业后入职了一家小型互联网公司&#xff0c;当着普普通通的初级测试工程师&#xff0c;工作期间虽然也时常遇到挑战&#x…

性能优化点

Arts and Sciences - Computer Science | myUSF 索引3层&#xff08;高度为3&#xff09;一般对于数据库地址千万级别的表 大于2000万的数据进行分库分表存储 JVM整体结构及内存模型 JVM调优&#xff1a;主要为减少FULL GC的执行次数或者减少FULL GC执行时间 Spring Boot程序…

在线文档管理工具都有什么值得推荐的?

在线文档管理工具是现代企业和个人必备的工具之一&#xff0c;它们可以帮助用户方便地创建、编辑、共享和管理文档。 几个值得推荐的在线文档管理工具&#xff1a; Google 文档&#xff1a;Google 文档是一款免费的在线文档工具&#xff0c;它提供了和 Microsoft Word 类似的…

微信公众号开发学习

申请测试号 地址 通过F12抓取体验接口权限表的HTML 解析HTML 引入pom <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><…

物联网|可变参数的使用技巧|不一样的点灯实验|访问外设的寄存器|操作寄存器实现点灯|硬件编程的基本流程-学习笔记(11)

文章目录 可变参数的使用技巧第三阶段-初级实验Lesson5:不一样的点灯实验---学习I/O的输出 ☆点灯的电路图分析1 一起看看点灯的电路图Tip1:另一种点灯的电路Tip1:如何访问外设的寄存器2 STM32F407中操作GPIO的方法 通过直接操作寄存器实现点灯实验Tip1:硬件编程的基本流程 2代…

数据可视化(4)散点图及面积图

1.简单散点图 #散点图 #scatter(x,y) x数据&#xff0c;y数据 x[i for i in range(10)] y[random.randint(1,10) for i in range(10)] plt.scatter(x,y) plt.show()2.散点图分析 #分析广告支出与销售收入相关性 dfcarpd.read_excel(广告支出.xlsx) dfdatapd.read_excel(销售…

VS开发Qt程序,无法打印QDebug调试信息,VS进行Qt开发时Qt Designer无法使用“转到槽”选项

VS开发Qt程序&#xff0c;无法打印QDebug调试信息&#xff0c;VS进行Qt开发时Qt Designer无法使用“转到槽”选项 VS开发Qt程序&#xff0c;无法打印QDebug调试信息VS进行Qt开发时Qt Designer无法使用“转到槽”选项 VS开发Qt程序&#xff0c;无法打印QDebug调试信息 解决方案…

使用Idea提交项目到远程仓库

使用Idea提交项目到远程仓库 1.在Idea中打开本地要推送的项目2.创建远程仓库并提交 1.在Idea中打开本地要推送的项目 tips: 首先你得有git工具&#xff0c;没有的话可以参考下面的这篇文章 git与gitee结合使用&#xff0c;提交代码&#xff0c;文件到远程仓库 从导航栏中选择 V…

如何快速开拓海外华人市场?附解决方案!

开拓华人市场对于企业来说是非常必要的。华人市场庞大且潜力巨大&#xff0c;拥有巨额的消费能力。随着华人经济的不断增长&#xff0c;越来越多的企业开始意识到华人市场的重要性。 通过开拓华人市场&#xff0c;企业可以获得更多的销售机会&#xff0c;并且在竞争激烈的市场…