首先1️⃣。。。全篇使用的技术栈当然是python了,毕竟作为一名点点点工程师,实际工作中做测试开发用的也是python,毕竟测试框架么,不需要什么"速度"。也会一点点cpp和js,但不多。什么?你说go和java?那只会用fmt和sout输出一下hello world,哈哈哈
PS:加了这么多批注,只是为了我自己看能方便些,还有我的个人想法和经验在里面,请叫我现代牛皮癣
1. 爬虫介绍
ChatGPTCV过来的。。。毕竟专业!!!我做不到这么好👌
爬虫(Web Crawler 或 Spider)是一个自动化程序,用于浏览互联网并提取信息。爬虫通过访问网页、解析内容和提取数据来实现数据收集,通常用于以下几个主要目的:
数据采集
爬虫可以从各种网站中自动提取信息。这种信息可以是产品价格、文本内容、图片、用户评论等,广泛应用于市场分析、研究和监控等领域。搜索引擎索引
搜索引擎(如 Google、Bing)使用爬虫来抓取互联网上的网页,并将其内容索引,以便用户在搜索时能够快速找到相关信息。竞争分析
企业或市场研究者可以使用爬虫监控竞争对手的价格、产品和市场活动,以制定更好的业务策略。数据清洗和整理
爬虫可以提取原始数据并进行格式化,方便后续的数据分析和处理。内容抓取
爬虫可以用于抓取特定网站的内容,进而进行二次开发,比如生成数据报告、创建数据集等。社交媒体分析
爬虫可以从社交媒体平台提取数据,分析用户行为、趋势及舆情等。监控网站变化
爬虫可以定期访问特定网站,监控内容的任何变化,比如价格变化、新闻更新等。
2. 技术栈
2.1 Python相关
2.1.1 python基础
这部分写个大概就直接pass了,默认我自己会python,毕竟是爬虫类博客----在小破站找课发现每一个课都会讲一下基础,我也给带上!!😘
- 语法,常量,变量,数据类型,运算符等
- 分支,循环等
- 数组,列表,元组,集合,字典等
- 函数,类,模块,库,面向对象(封装继承多态)等
- 异常,文件,匿名函数等
- 闭包,递归,装饰器,正则等
- 数据结构,算法等
2.1.2 网络请求库
重点开始了❗️,基础但很重要的玩意儿
- requests ---- 支持发送各种类型的请求(GET、POST等),并能够处理响应 ---- 常用库,个人觉得特别好用,做接口自动化也喜欢用这个库
- urllib ----- python标准库
- aiohttp ---- 异步 HTTP 客户端和服务器框架,使用 asyncio 实现,可以处理高并发的请求
2.1.3 网页解析库
- BS4 ---- 解析 HTML 和 XML 文档的库
- lxml ---- 解析和处理 XML 和 HTML 的库 ---- xpath专用,单从写xpath表达式的感觉来说,要比BS4舒服,个人觉得😌
- re ---- 正则库,用于匹配复杂文本
2.1.4 爬虫框架
- Scrapy ---- 支持分布式和异步
- PySider ---- 轻量级爬虫框架
- Crawlab ---- 支持可视化监控和管理
2.2 反爬技术
ChatGPT搜的,作为小白,目前接触到的最多的就是UA、cookie和Referer检查(验证码除外),不过有一次批量爬取豆瓣数据,IP被封禁了几个月😭
2.2.1 IP 封禁
描述: 当同一 IP 地址在短时间内发送过多请求时,网站会将其列入黑名单,拒绝其后续请求。
作用: 有效防止短时间内发送大量请求的爬虫。
2.2.2. 速率限制
描述: 服务器限制来自特定 IP 地址的请求速率,如每秒最多允许的请求次数。
作用: 通过限制请求频率,降低爬虫成功抓取数据的效率。
2.2.3. User-Agent 验证
描述: 网站会检查请求中的 User-Agent 字段,识别是否为浏览器或爬虫。常见的爬虫工具有特定的 User-Agent。
作用: 拒绝或屏蔽常见的爬虫 User-Agent,以防止自动化访问。
2.2.4. Cookie 验证
描述: 一些网站通过设置 Cookie 来跟踪用户,并要求用户在访问时带上特定的 Cookie。
作用: 只有正确设置了 Cookie 的请求才能通过,爬虫如果无法管理 Cookie,会受到限制。
2.2.5. 验证码(CAPTCHA)
描述: 通过要求用户完成验证码(如输入扭曲文字、选择图片等)来验证是否为人类用户。
作用: 有效阻止自动化程序的访问,因为爬虫通常无法通过这些验证。
2.2.6. JavaScript 渲染
描述: 一些网站使用 JavaScript 动态生成内容,只在用户的浏览器中渲染数据,而爬虫无法解析 JavaScript。
作用: 防止爬虫直接抓取静态 HTML。
2.2.7. 动态内容加载(AJAX)
描述: 使用 AJAX 技术异步加载数据,因此一开始加载的页面上没有完整的数据,这需要发送额外请求。
作用: 爬虫需要模拟这些请求才能获得完整数据,增加了抓取的复杂性。
2.2.8. 反序列化检测
描述: 网站会检测请求的结构与正常用户行为的差异,监控是否有异常的请求模式。
作用: 识别通过特殊方式反序列化请求的爬虫。
2.2.9. HTML 结构改变
描述: 频繁改变网站的 HTML 结构或 URL 规则,使得爬虫在抓取过程中常常无法获取到数据。
作用: 迫使爬虫不断更新爬取逻辑,增加维护成本。
2.2.10. IP 地理位置分析
描述: 根据访问者的 IP 地址分析其地理位置,如果请求来自不同的地区,可能会被限制。
作用: 限制数据访问到某些特定地区的爬虫。
2.2.11. 内容加密或动态内容
描述: 网站可能会将某些页面内容加密,或依赖于用户操作才能呈现的内容(如按钮点击后展示的数据)。
作用: 使得爬虫无法直接获取内容。
2.2.12. 请求伪造检测
描述: 通过比对请求的来源、原始地址、请求引用(Referer)等,来检测是否为伪造请求。
作用: 识别出那些不是通过正常入站线路访问的请求。
2.2.13. 页面行为监测
描述: 监测用户在页面上的行为(如鼠标移动、点击频率等),非真实用户的行为模式会触发监测。
作用: 识别出机器人行为并拦截相关请求。
2.2.14. IP 轮换检测
描述: 若大量请求来自不同 IP 但行为模式相似,服务器可能会将其视为爬虫行为检测。
作用: 通过行为模式识别抓取工具。
2.2.15. DNS 误导
描述: 通过将请求重定向到虚假的 DNS 地址,进而拦截请求。
作用: 直接影响爬虫的请求路径。
2.2.16. HTTP Referer 检查
描述: 检测请求中 Referer 字段,确保请求来自合法的网页来源。
作用:阻止爬虫通过直接请求 URL 而绕过正常的页面导航。
2.2.17. 实时监控和分析
描述: 利用工具和技术实时监控流量,分析异常模式并采取措施。
作用: 及时识别并阻止爬虫的攻击。
2.3 数据存储
2.3.1 文本文件
- Json
- Html
- Csv
- openxl
2.3.2 数据库
- Mysql
- SQLite
- MongoDB
- PyMysq库
2.4 数据处理
嗯。。。😯最好掌握一下,毕竟数据清洗也是必不可少的一个环节,实际工作中不光需要拿到数据就可以了,基本都要进行数据分析
2.4.1 Numpy
简介: NumPy 是一个用于科学计算的基础库,支持高性能的多维数组和矩阵操作。
特点:
- 提供强大的数组对象 N-dimensional array (ndarray)
- 支持数学函数和线性代数运算
2.4.2 Pandas
简介: Pandas 是一个强大的数据处理和分析库,特别适用于条件数据操作、数据清洗、统计分析等任务。
特点:
- 提供 DataFrame 和 Series 数据结构
- 支持数据读取(如 CSV、Excel)、数据清洗和转换
- 提供丰富的数据操作功能,如分组、合并、连接等
2.4.3 Excel表
想了想还是加了Excel,毕竟实际工作中说不定可能会使用Excel表分析展示数据,毕竟老板👵喜欢💗(比如我公司需求就是,测试工具处理数据后生成的测试报告都是要展示成Excel表形式反馈的)
不要小看Excel,就那些宏和函数,也够头疼的,玩好了也是大佬级别的存在🧍♂️
2.5 数据可视化
数据处理完了,就要展示给boss👵看了,当然,我工作中用的最多的还是Matplotlib,把折线趋势图往Excel表里一丢,测试报告,成了✅
2.5.1 Matplotlib
简介: Matplotlib 是一个基础的数据可视化库,支持生成多种类型的静态、动态、交互式图表。
特点:
- 灵活性高,支持自定义图表的各个方面
- 提供多种绘图类型(如折线图、散点图、柱状图等)
2.5.2 Seaborn
简介: Seaborn 是基于 Matplotlib 的高级可视化库,提供了更为美观和易用的图表。
特点:
- 对统计数据的可视化特别友好
- 提供内置的主题和颜色调色板
2.5.3 Plotly
简介: Plotly 是一个用于创建交互式图表的库,支持多种图形类型。
特点:
- 支持丰富的交互功能
- 可以生成 Web 图表并嵌入到 Web 应用中
2.6 图像识别
这个我。。。反正多学点不吃亏,之前用OCR技术识别验证码,可是Fail❎率挺高的,而且遇到稍微复杂一点点的验证码,比如说中间加了一条,就疯狂Fail!!!有人教唆我用Tensorflow训练一个验证码识别模型。。。但。。。我不会,哈哈哈,不管了,先挂上再说
对于点点点,最简单解决验证码方式就是 ---- 喂!来给俺把测试环境验证码先给注掉!俺要跑一遍自动化!
2.6.1 openCV
简介: OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,提供了多种图像处理和计算机视觉功能。
功能:
- 图像读取与写入
- 图像变换(平滑、滤波、边缘检测等)
- 特征检测(如 SIFT、SURF、ORB)
- 编写简单的图像处理脚本
2.6.2 Pillow
简介: Pillow 是 Python Imaging Library(PIL)的一个分支,提供图像处理工具,支持图像操作的简化。
功能:
- 图像打开、保存、裁剪、调整大小
- 图像滤镜和效果
- 处理图像的文本和矩形
2.6.3 TensorFlow 和 Keras
简介: TensorFlow 是一个开源的深度学习框架,而 Keras 是一个高层次的神经网络 API,能够与 TensorFlow 等后台框架一起使用。
功能:
- 训练和部署深度学习模型,尤其是卷积神经网络(CNN)
- 使用预训练模型进行迁移学习
- 支持图像分类、目标检测、图像生成等
2.6.4 PyTorch
简介: PyTorch 是一个流行的开源深度学习框架,较 TensorFlow 更加灵活,常用于研究和开发。
功能:
- 动态计算图,易于调试
- 支持 CNN 和其他深度学习结构
- 目标检测(如使用 torchvision)
2.6.5 Tesseract
简介: Tesseract 是一个开源的 OCR 引擎,能够从图像中提取文本。
功能:
- 处理各种语言的字符识别
- 支持图像预处理
2.7 网页自动化库
如果实在爬不到,只能上自动化工具来模拟了!!(这个我熟悉😌)
2.7.1 selenium
概述: Selenium 是一个广泛使用的自动化测试工具,最初是用于 Web 应用程序的测试。
优点:
- 支持多种浏览器(如 Chrome、Firefox、Safari 等)。
- 提供了丰富的 API 以控制浏览器,如鼠标点击、键盘输入等。
2.7.2 Playwright
概述: Playwright 是一个相对较新的工具,旨在提供更快、更强大的浏览器自动化功能。
优点:
- 支持最新的浏览器特性(如 WebKit、Chromium 和 Firefox)。
- 允许多浏览器上下文的支持,能模拟不同类型的用户会话。
- 更简洁和强大的 API,相较于 Selenium 使用上更为灵活。
爬取移动应用程序(APP)涉及的技术和框架与传统网页爬虫稍有不同,主要因为移动应用通常依赖于 API 和网络服务,而不是直接对网页进行抓取。以下是一些常用于抓取APP的库或框架:
2.8 APP爬虫
随着APP的盛行,APP爬取技术也越来越重要,对于APP爬取技术,可以掌握一哈,嗯。。。新手小白我也不懂,先按ChatGPT给的大纲写着,以后有不对的地方再修改
2.8.1 API 抓取
许多应用程序与后端 RESTful 或 GraphQL API 进行交互。可以使用以下库来抓取它们
- Requests: Python 中非常常用的库,用于发送 HTTP 请求并处理响应。
- Axios: 一个基于 Promise 的 JavaScript 库,用于发送 HTTP 请求。
2.8.2 移动应用反向工程工具
- APKTool: 用于反编译 APK 文件(Android 应用的包文件),分析和修改资源、Manifest 文件。
- JD-GUI / JADX用于反编译 Java 字节码,帮助用户理解应用程序的逻辑和行为。
- Frida: 动态分析工具,可以在运行时拦截和修改函数调用。适用于 Android 和 iOS。
- Burp Suite用作 Web 应用程序安全测试工具,也可以用来拦截和分析移动应用的网络请求。
2.8.3 APP自动化测试框架
- Appium: 一个开源的移动应用自动化测试框架,支持 Android 和 iOS,可以编写测试脚本与应用交互。
- UIAutomator: Android 官方提供的 UI 测试框架,允许自动化操作。
- XCUITest: 苹果官方提供的 iOS 测试框架。
2.8.4 监控网络请求
- Charles Proxy: 一款强大的网络调试代理,可抓取和查看移动应用的网络请求。
- Fiddler: 另一款流行的网络监控工具,支持 HTTPS 解密和拦截。
- Wireshark: 虽然主要用作网络分析工具,但也可以用于捕获和分析数据包。
2.8.5 模拟器和真机测试
在抓取和自动化测试移动应用时,可能需要使用模拟器或真实设备:
- Android Studio Emulator: Android 官方的模拟器,可以用于测试和抓取 Android 应用。
- Xcode Simulator: 苹果官方的 iOS 模拟器,用于测试和抓取 iOS 应用。
真实设备: 有时使用真实设备进行测试会更可靠,特别是当应用对设备特性有特别依赖时。
2.9 抓包工具
做爬虫时,需要监控、分析和调试网络请求和响应,一款优秀的抓包工具也是必不可少的,当然F12也行,但是使用专业抓包工具会更舒心!个人更喜欢Fiddler,可能是工作中使用的就是Fiddler,用顺手了
Fiddler: Fiddler 是一个强大的 Web 调试代理,可记录 HTTP(S) 流量。它适用于多种平台,并且支持对请求和响应进行分析和修改。
Charles: Charles 是一款跨平台的 Web 调试代理,功能类似于 Fiddler,它支持 HTTP 和 HTTPS 的请求捕获及修改。
Wireshark: Wireshark 是一款强大的网络协议分析工具,能够捕获和分析网络数据包,适用于更底层的网络通信分析。
Postman: Postman 是用于测试和调试 API 的工具,虽然它并不是传统意义上的抓包工具,但它可以帮助用户发送请求并查看响应。
2.10 高阶爬虫技术
实际上高不高阶不知道,反正我没怎么听过的,就给它扔进高阶中,毕竟是我写的文档,想怎么放就怎么放,哈哈哈。。。
2.10.1 JS 逆向
听着就很高级,反正抖子上一搜,全是教逆向的直播或视频,但我不会。。。
当网站使用 JavaScript 进行数据加载时,解析和逆向理解这些脚本是非常重要的。技术包括:
- 静态分析: 分析 JavaScript 代码以了解数据的请求格式、API endpoints、参数等。
- 动态分析: 在浏览器中执行 JavaScript,并监视网络请求,捕获 API 响应。
2.10.2 WebSockets 抓取
一些网站使用 WebSocket 进行实时数据传输。抓取此类数据需要:
- 使用 WebSocket 客户端库(如 websocket 模块)来连接和监听服务端发送的数据。
- 分析 WebSocket 消息格式以提取所需数据。
2.10.3 Captcha 绕过
What???
许多网站会使用 CAPTCHA 来防止自动化请求,处理此类问题可以使用:
- 第三方 CAPTCHA 解决服务: 如 2Captcha、Anti-Captcha。
- 机器学习算法: 自己构建模型来识别常见的 CAPTCHA 类型(如简单的文字干扰)。
2.10.4 反向代理和 IP 轮换
爬虫怕IP被封经常用到代理,但是为什么在高阶爬虫里?因为一个优秀的、稳定的代理IP,要花钱💰,要钱的东西就是高级的东西
- 代理池: 使用多个 IP 地址的代理服务,轮换请求来源 IP。
- 动态代理: 根据访问频率和封禁状态自动切换或更新代理 IP。
2.10.5 分布式爬虫架构
- 使用爬虫框架: 如 Scrapy、CrawlSpider,结合分布式任务队列(如 Celery、RabbitMQ)。
- 数据存储优化: 使用分布式数据库(如 MongoDB、Cassandra)。
2.10.6 智能爬虫(AI/ML 辅助)
万物皆AI是吧
结合机器学习和 AI 技术,提升数据抓取的效率与智能:
- 异常检测: 使用机器学习模型检测和识别网站的反爬措施。
- 智能内容抓取: 基于内容相似性或上下文自动选择抓取目标。
2.10.7 浏览器无头模式
测试自动化也用,可大大增加UI自动化测试效率
- 无头浏览器: 如 Puppeteer、Playwright,可以在服务器上运行,减少资源消耗而不影响抓取效果。
2.selenium设置无头模式: 启用handless即可
2.11 杂七杂八
2.11.1 数据结构和算法
什么都数据结构!!!什么都算法!!!但是。。。会这俩玩意工资💰真的可以翻一翻,而且大型架构算法优化很重要,所以先挂上吃灰
2.11.2 互联网协议
搞爬虫对于协议当然必须掌握,不仅是爬虫哈,只要与web相关的都需要,建议有时间的时候把计算机四大件啃掉!!!
- HTTP/HTTPS
- UDP/TCP
爬虫总括先总结这么多,少了后续再补。当然,最重要的一点是:一定遵守robot君子协议!!(当然,我就说说,爬虫第一课肯定先把君子协议注释掉的,不然咋爬?爬不到啊!!)