认识爬虫技术

news/2024/9/19 4:50:23/ 标签: 爬虫

爬虫目的

网络爬虫,主要目的是代替人工收集网络数据。

应用场景主要包括两个方面:

  • 网页收集的数据量少,但重复操作频率高;

  • 通过网页搜集数据的量大。

只要满足以上两个应用场景,其实都可以考虑使用爬虫技术降低人工成本。

爬虫技术

爬虫的本质,就是模拟人的操作,把网页下载下来,然后通过网页内容找到目标数据。

主要可以分为两个步骤:

  1. 下载目标网页

  2. 找到目标数据

第 2 步的操作,就是从已有的网页文本内容中,找到目标目标数据。

这个相对而言,是比较简单的,利用正则匹配 或者是 HTML DOM 结构解析查询都能够比较容易实现目的。

但一般提到的爬虫技术,其实是针对如何下载目标网页的技术。

没经验的朋友可能觉得下载网页很简单,直接一个 GET 域名请求,就可以拿到网页数据。

本质上确实就是这么简单,但复杂点在于:

几乎每一个有内容、数据的网站,都会有一套自己的反爬虫策略。

所以,在有爬取目标的情况下,我们就需要具体测试出来的这个网站的反爬虫策略。

这个 测试、验证、解决反爬虫机制的过程,其实就是所谓的爬虫技术

爬虫/爬虫策略

常见的反爬虫策略主要有以下 6 个方向的考虑:

1. 动态页面结构

  • 定期更改页面结构

    • 爬虫策略:通过定期更改网站的页面结构、标签、关键数据对应的标签属性,这样可以使爬虫难以长期有效地抓取网站。

    • 爬虫策略:这种方式基本无解,爬虫必须跟随目标网站重新适配爬虫的页面解析逻辑。

  • 动态加载内容

    • 爬虫策略:使用 JavaScript 动态加载内容,使静态爬虫无法抓取到完整的页面信息。

    • 爬虫策略:使用 JavaScript 去触发动态加载内容或者用类似于 Python 的 Selenium 模拟人的操作。

2. 内容混淆和加密

  • 数据加密

    • 爬虫策略:将关键数据进行加密,增加爬虫解析的难度。

    • 爬虫策略:如果要爬取的数据是加密后的结果,除非是知道解密方式和密钥,否则没办法。

  • 图片化关键信息

    • 爬虫策略:将一些关键信息(如价格,电话号码等)转化为图片,这样可以防止简单的文本爬虫抓取这些信息。

    • 爬虫策略:通过 OCR 等技术识别出来图片信息。

3. 隐藏和混淆链接

  • 链接混淆

    • 爬虫策略:对网站内的链接进行混淆,使得爬虫难以识别和跟踪链接。

    • 爬虫策略:这种情况只能观察已有混淆的链接和网站真实链接有什么样的关系,进行猜测和验证 。

  • 使用JavaScript生成链接

    • 爬虫策略:使用 JavaScript 动态生成链接,可以防止静态爬虫抓取链接。

    • 爬虫策略:使用 JavaScript 去触发动态加载内容或者用类似于 Python 的 Selenium 模拟人的操作加载出来对应的链接信息。

4. 增加验证和检测机制

  • 验证码验证

    • 爬虫策略:在关键页面增加验证码验证,可以有效防止自动化的爬虫访问。

    • 爬虫策略:简单文字字母验证码可以通过 OCR,但复杂验证码基本无解。

  • 行为检测

    • 爬虫策略:通过检测用户行为(如鼠标移动,点击等)来识别和阻止自动化的爬虫

    • 爬虫策略:这种可以通过类似于 Python 的 Selenium 模拟人的操作解决。

5. 服务端限制和监控

  • 访问请求头检查:

    • 爬虫策略:检查 HTTP 请求的 User-Agent、Cookie、及其他请求头信息的有效性。

    • 爬虫策略:模拟或直接使用网站网络请求的 UA 、Cookie 及请求头信息。

  • 访问频率限制

    • 爬虫策略:通过限制单一 IP 或用户的访问频率,可以防止爬虫的大量访问。

    • 爬虫策略:用动态的代理 IP 解决单一 IP 问题

  • 用户代理检测

    • 爬虫策略:检测和限制使用已知的爬虫用户代理的访问。

    • 爬虫策略:用更多的动态代理 IP,遇到被禁的 IP 直接再换一个。

6. 合法及法律方面的考虑

  • 法律法规

    • 爬虫策略:清楚标示网站的使用条款,明确禁止非法爬虫的行为。

    • 爬虫策略:不要公开使用和展示,仅限于方便自家数据的流转和使用。

  • 维权行动

    • 爬虫策略:在检测到非法爬虫时,可以考虑通过法律手段来保护网站的数据和资源。

    • 爬虫策略:如果被人发律师函,被举报,则自求多福~

在用法律维权前,现在常见的做法都是通过服务端限制和监控,检查 User-Agent、Cookie、Ip 的方式做反爬虫的处理,毕竟,不管怎么爬取,最后都得请求目标网站的服务器,所以直接检查你的服务请求活动是否异常就可以。

所以,一般爬虫主要用 动态UA+动态Cookie+动态IP代理 执行 HTTP 请求就够了。

动态 IP 代理

动态 UA、动态 Cookie 都可以自己任意组装生成,这部分没有难度。

大部分人遇到的问题,主要是获取动态 IP 代理

这个问题,本质上是一个资源限制问题。

我们都知道,能在互联网上公开进行网络访问的 IP 地址,都是需要由合法的 IP 地址机构分配得到,并且全球唯一。

普通人肯定是拿不到很多的公网 IP 地址,居民楼一般一栋楼也就的一个公网 IP 而已。

遇到根据 IP 的反爬虫策略,要么被禁止,要么只能以普通人访问的速度爬取网页,且还不能过于规律。

如果爬取的场景,不要求频率很高,不要求多个地区节点进行访问,那单个 IP 也问题不大,每次爬取的时间间隔长一点就行。

但如果爬取的场景,要求频率 或者 要求不同区域节点访问,那这种情况,就只能找合适的代理 IP。

代理 IP,有很多现成的服务商。

但这种 IP 代理服务的价格都不低,收费模式也多样化,包括:

  • 按获取的代理 IP 个数收费

  • 按租用 IP 代理的时长收费

  • 按经过 IP 代理的流量收费

我了解到的按流量收费价格,最高的 80 元/GB,最低的也要 10 元/GB。

所以,在考虑爬虫开发时,除了人工时长成本,还要考虑到动态 IP 代理的费用。

免费 IP 代理池开源项目

互联网上,有一些平台会分享一些免费的 IP 代理。

但很少,很多人用。

Github 上有一些项目,是专门收集这种可免费使用的 IP 代理数据。

  • scrapy-proxies:用于 Scrapy 的中间件,用于设置代理 IP。
  • proxybroker:可以找到和检查代理的 Python 包,项目地址是。

  • gimmeproxy-api:提供免费代理的 API。

  • free-proxy这是一个可以从多个网站收集免费代理的 Python 脚本。

  • proxy-pool:这是一个 Python 编写的代理池项目,可以自动爬取和验证代理。


http://www.ppmy.cn/news/1520681.html

相关文章

TCP协议 配合 Wireshark 分析数据

在TCP连接中,无论是客户端还是服务端,都有可能成为发送端或接收端,这是因为TCP是一个全双工协议,允许数据在同一连接中双向流动 客户端(Client):通常是指主动发起连接请求的一方。例如&#xf…

【归纳总结】常见排序算法及其实现:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快排、归并排序

思维导图: 目录 思维导图: 一、插入排序 1.直接插入排序: a:基本思想: b:基本步骤: c:复杂度分析 d:Java代码实现: 2.希尔排序(缩小增量排序) a:基本思想: c…

VMware部署linux系统

前期准备 安装VMware的相关教程在我的另一篇博客。 VMware的安装教程-CSDN博客 CentOS7.6的安装包 链接:https://pan.baidu.com/s/1sl8COPAC_VEcRtKxvu2S1A?pwd84el 提取码:84el 如果觉得百度网盘速度太慢,可以去镜像下载也可以 阿里…

对同一文件夹下所有excel表进行相同操作(数据填充、删除、合并)

背景引入:如图所示,笔者需要对数十个表格的银行日记账工作簿合并成一个工作簿,以便与本月银行流水进行核对。 为了方便银行日记账与银行流水进行核对,需要再每个村或小组的表格中,将村或小组的名称放在J列。 clear c…

mongodb在Java中条件分组聚合查询并且分页(时间戳,按日期分组,年月日...)

废话不多说,先看效果图: SQL查询结果示例: 多种查询结果示例: 原SQL: db.getCollection("hbdd_order").aggregate([{// 把时间戳格式化$addFields: {orderDate: {"$dateToString": {"for…

51单片机-独立按键

时间&#xff1a;2024.8.28 作者&#xff1a;Whappy 目的&#xff1a;学习51单片机 代码&#xff1a; #include <REGX52.H> #include "intrins.h"void Delay1ms(unsigned int xms) //11.0592MHz {unsigned char i, j;while(xms--){_nop_();i 2;j 199;do{…

ORA-01186: file 201 failed verification tests

环境&#xff1a;oracle11.2.0.4RACASMred hat6.1x64 主库两节点RAC&#xff0c;备库也为两节点RAC。 备库启用为实时应用查询。日志应用等都是正常的。 主库asm group如下&#xff1a; ASMCMD> ls CRS/DATA/ FRA/ 备库asm group如下&#xff1a; ASMCMD> ls CRS/SDATA/ …

西北工业大学oj-打印杨辉三角

用函数编程计算并输出如图所示的杨辉三角&#xff0c;行数由用户输入。 这道题就很简单了知道杨辉三角的规律&#xff0c;前后都是1&#xff0c;中间数字等于左上加右上 杨辉三角可以通过递推公式计算&#xff1a;C(n, k) C(n-1, k-1) C(n-1, k)&#xff0c;其中 C(n, k) 表…

掌控安全CTF-2024年8月擂台赛-ez_misc

题解&#xff1a; 题目给了一个流量包和一个加密的zip文件&#xff0c;我们首先打开流量包&#xff0c;很多流量&#xff0c;查看一下http协议&#xff0c;发现是个sql靶场&#xff0c;找到关键字样flag&#xff0c;得到一串字符&#xff1a; LJWXQ2C2GN2DAYKHNR5FQMTMPJMDER…

STM32F103C8----GPIO(跟着江科大学STM32)

一&#xff0c;GPIO简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口 可配置为8种输入输出模式 引脚电平&#xff1a;0V~3.3V&#xff08;0V&#xff09;&#xff0c;部分引脚可容忍5V 输出模式下可控制端口输出高低电平&#xff0c;用以驱动…

【机器学习-随记】使用 Slack 和 Facebook Messenger 的消息机器人实现虚拟客服人员

使用 Slack 和 Facebook Messenger 的消息机器人实现虚拟客服人员 1. 平台选择与集成 2. 消息机器人开发 3. 自然语言处理 (NLP) 4. 虚拟助手功能实现 5. 语音助手集成 6. 安全与用户隐私 7. 测试与部署 &#x1f388;边走、边悟&#x1f388;迟早会好 实现一个虚拟客…

基于精益六西格玛管理方法进行生产线综合改善

生产线精益六西格玛改善是一个系统工程&#xff0c;只有对其进行系统的策划与组织&#xff0c;才能收到良好的改善效果。一般来说&#xff0c;需要成立一个专门的精益六西格玛推进组织&#xff0c;由其完成一系列的组织、准备工作。具体如下&#xff1a; &#xff08;1&#xf…

王立铭脑科学50讲后续1,自己从课程中提起自己所需的知识,安放到自己的知识体系中。

王立铭脑科学50讲后续1&#xff0c;自己从课程中提起自己所需的知识&#xff0c;安放到自己的知识体系中。 建立第一版——对人类智慧的框架&#xff0c;后期的所有相关知识都安装在这个框架里&#xff0c;不断修正这个框架。 最底层&#xff1a;感知输入系统和动作输出系统&a…

高效过滤器检漏过程中上游浓度过低过高什么原因?

洁净区高效过滤器检漏是确保洁净环境正常运行的重要环节&#xff0c;但是很多企业检测人员&#xff0c;在进行高效过滤器检漏过程中&#xff0c;经常会遇到一些突发问题无法解决&#xff0c;今天中邦兴业技术工程师团队给大家汇总了一些高效过滤器检漏过程中常见问题&#xff0…

【C++】STL学习——vector模拟实现

目录 vector介绍vector函数接口总览结构介绍默认成员函数构造函数1构造函数2构造函数3经典的深浅拷贝拷贝构造赋值重载析构函数 迭代器begin和end 容量相关函数sizecapacityemptyreserveresize 访问operator[] 修改相关函数insertpush_backerasepop_backclearswap 迭代器失效问…

DataGridView用法合集【精品】

目录 1.当前的单元格属性取得、变更 2.DataGridView编辑属性 3.DataGridView最下面一列新追加行非表示 4.判断当前选中行是否为新追加的行 5. DataGridView删除行可否设定 6. DataGridView行列不表示和删除 7. DataGridView行列宽度高度设置为不能编辑 8. DataGridView行…

62-java线程池的执行过程

Java线程池的执行过程主要包括以下几个步骤&#xff1a; 创建线程池&#xff1a;使用ThreadPoolExecutor类创建线程池&#xff0c;并设置核心线程数、最大线程数、队列容量、保持存活时间等参数。 提交任务&#xff1a;将任务&#xff08;通常实现Runnable或Callable接口&…

黑神话:悟空-配置推荐

显卡推荐&#xff08;按类别整理&#xff09; 1. GTX 10系列、GTX 16系列&#xff1a; 如果希望体验光线追踪&#xff0c;建议根据预算升级到RTX 40系列显卡。对于1080p分辨率&#xff0c;至少需要RTX 4060才能流畅运行。 2. RTX 20系列&#xff1a; RTX 2060、RTX 2070&#…

基于Transformer架构训练LLM大语言模型:Transformer架构工作原理

视频讲解&#xff1a;Transformer架构的工作原理讲解_哔哩哔哩_bilibili 一 Transformer架构总体架构 1 总体架构图 总体架构说明&#xff1a; 输入层 词嵌入&#xff08;Word Embeddings&#xff09;: 输入文本中的每个词都被映射到一个高维空间中的向量&#xff0c;这些向…

最新Python安装+PyCharm安装激活和使用教程(pycharm激活)

PyCharm激活 激活码&#xff1a; EUWT4EE9X2-eyJsaWNlbnNlSWQiOiJFVVdUNEVFOVgyIiwibGljZW5zZWVOYW1lIjoic2lnbnVwIHNjb290ZXIiLCJhc3NpZ25lZU5hbWUiOiIiLCJhc3NpZ25lZUVtYWlsIjoiIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiIiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7…