爬虫原理详解及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,可以看到网站返回的响应头信息
    代码示例如下图所示:
    在这里插入图片描述

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

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

相关文章

IDEA的基础使用——【初识IDEA】

IDEA的基础使用——【初识IDEA】 文章目录 IDEA简介前言官网 IDEA的下载与安装选择下载路径勾选自己需要的其余按默认选项进行即可 目录简介安装目录简介 运行Hello WorldIDEA快捷键常用模板模板一:psvm(main)模板二:模板三&#…

215. 数组中的第K个最大元素

题目链接:力扣 解题思路: 方法一:基于快速排序 因为题目中只需要找到第k大的元素,而快速排序中,每一趟排序都可以确定一个最终元素的位置。 当使用快速排序对数组进行降序排序时,那么如果有一趟排序过程…

frida学习及使用

文章目录 安装frida安装python3.7设置环境变量安装pycharm和nodejs 使用frida将frida-server push到手机设备中端口转发安装apk使用jadx查看java代码运行frida-server frida源码阅读frida hook方法Frida Java层hoookJavaHook.javaJavaHook.js Frida native层hook 一NativeHook.…

深度学习——划分自定义数据集

深度学习——划分自定义数据集 以人脸表情数据集raf_db为例,初始目录如下: 需要经过处理后返回 train_images, train_label, val_images, val_label 定义 read_split_data(root: str, val_rate: float 0.2) 方法来解决,代码如下&#xff1a…

局域网内电脑ping不通(防火墙惹的祸)

明明是同一网段(同一局域网)的电脑,却ping不通,这种情况大概率就是防火墙惹得祸了。除了把防火墙关掉,我们还可以采取如下解决方案。 解决方案: 1. 打开:控制面板\系统和安全\Windows Defende…

matlab多线程,parfor循环进度,matlab互斥锁

一. 内容简介 matlab多线程,parfor循环进度,matlab互斥锁 二. 软件环境 2.1 matlab 2022b 2.2代码链接 https://gitee.com/JJW_1601897441/csdn 三.主要流程 3.1 matlab多线程 有好几种,最简单的,最好理解的就是parfor&am…

面试热题(无重复字符的最长子串)

无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 解法一: public int lengthOfLonge…

css 动画之旋转视差

序&#xff1a;网上看到的一个例子&#xff0c;做一下 效果图&#xff1a; 代码&#xff1a; <style>.content{width: 300px;height: 300px;margin: 139px auto;display: grid;grid-template-columns: repeat(3,1fr);grid-template-rows: repeat(3,1fr);grid-template:…

4年测试工程师,常用功能测试点总结,“我“不再走弯路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 输入框测试 1、字…

MySQL的JSON操作

官网地址 1. MySQL json介绍 As of MySQL 5.7.8, MySQL supports a native JSON data type defined by RFC 7159 that enables efficient access to data in JSON (JavaScript Object Notation) documents. Automatic validation of JSON documents stored in JSON columns. …

【消息中间件】原生PHP对接Uni H5、APP、微信小程序实时通讯消息服务

文章目录 视频演示效果前言一、分析二、全局注入MQTT连接1.引入库2.写入全局连接代码 二、PHP环境建立总结 视频演示效果 【uniapp】实现买定离手小游戏 前言 Mqtt不同环境问题太多&#xff0c;新手可以看下 《【MQTT】Esp32数据上传采集&#xff1a;最新mqtt插件&#xff08;支…

PHP: 开发入门macOS系统下的安装和配置

安装Homebrew 安装 ~~友情提示&#xff1a;这个命令对网络有要求&#xff0c;可能需要翻墙或者用你的手机热点试试&#xff0c;或者把DNS换成&#xff08;114.114.114.114 和 8.8.8.8&#xff09; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebr…

【【胎教级51单片机智能小车设计】】

胎教级51单片机智能小车设计 从现在开始开一个新坑 称为创意工坊 主要更新一些有意思的设计 第一次手把手更新51单片机智能小车 胎教级教学人人都会 单片机实现的功能是通过蓝牙APP 控制小车前后左右移动 先讲明白这个小车 后续再在这个小车上更新其他的设计 成品图 第一步…

分库分表之基于Shardingjdbc+docker+mysql主从架构实现读写分离(一)

说明&#xff1a;请先自行安装好docker再来看本篇文章&#xff0c;本篇文章主要实现通过使用docker部署mysql实现读写分离&#xff0c;并连接数据库测试。第二篇将实现使用Shardingjdbc实现springboot的读写分离实现。 基于Docker去创建Mysql的主从架构 #创建主从数据库文件夹…

Rocky(centos) jar 注册成服务,能开机自启动

概述 涉及&#xff1a;1&#xff09;sh 无法直接运行java命令&#xff0c;可以软连&#xff0c;此处是直接路径 2&#xff09;sh脚本报一堆空格换行错误&#xff1a;需将转成unix标准格式&#xff1b; #切换到上传的脚本路径 dos2unix 脚本文件名.sh 2&#xff09;SELINUX …

如何使用STAR原则优化项目管理?

介绍STAR原则 1.1 STAR原则的定义 STAR原则是一个行为面试技术&#xff0c;即Situation&#xff08;情境&#xff09;、Task&#xff08;任务&#xff09;、Action&#xff08;行动&#xff09;和Result&#xff08;结果&#xff09;。这种原则被广泛应用在职业面试中&#x…

PROFINet转Modbus协议转换网关Profinet数据通讯模块

产品概述 你是否曾经遇到过不同网络协议之间的沟通问题&#xff1f;捷米特JM-RTU-PN为你解决这个难题&#xff01; 捷米特JM-RTU-PN是一款数据通讯模块&#xff0c;能够实现PROFINet网络与Modbus网络之间的数据传输。它可以将RS485网络连接到PROFINet网络&#xff0c;并支持不…

【iOS】—— UIKit相关问题

文章目录 UIKit常用的UIKit组件懒加载的优势 CALayer和UIView区别关系 UITableViewUITableView遵循的两个delegate以及必须实现的方法上述四个必须实现方法执行顺序其他方法的执行顺序&#xff1a; UICollectionView和UITableView的区别UICollectionViewFlowLayout和UICollecti…

mysql进阶-用户的创建_修改_删除

1. 使用mysql单次查询 [rootVM-4-6-centos /]# mysql -h localhost -P 3306 -p mytest -e "select * from book1"; Enter password: ------------------------------------------- | id | category_id | book_name | num | ----------------------------…

第七章 图论

第七章 图论 一、数据结构定义 图的邻接矩阵存储法#define MaxVertexNum 100 // 节点数目的最大值// 无边权&#xff0c;只用0或1表示边是否存在 bool graph[MaxVertexNum][MaxVertexNum];// 有边权 int graph[MaxVertexNum][MaxVertexNum];图的邻接表存储法 把所有节点存储为…