Chrome插件 | WEB 网页数据采集和爬虫程序

无边无形的互联网遍地是数据,品类丰富、格式繁多,包罗万象。数据采集,或说抓取,就是把分散各处的内容,通过各种方式汇聚一堂,是个有讲究要思考的体力活。君子爱数,取之有道,得注意遵守相关的法律法规和网站的使用政策😎

楔子

21世纪是信息时代,信息就是财富。数据(信息)采集是指从信息使用者的需要出发,通过各种渠道和形式获取相关信息的过程.。采集及时、准确、全面的信息是信息管理的基本前提,同时也是管理者决策的参考依据。

写论文时,从统计局网站粘贴几个数值;不定时将公示结果转存到Excel;批量把在线的高清美图下载到本地。这些都是 WEB 数据采集的日常例子。

信息采集最简单最原始的方式,就是人力直接操作,CTRL+C、CTRL+V一套组合拳下来,数据就到碗里来了👏🏻。不过,这数据量一旦上来,铁打的人都吃不消。于是乎,人们想到了用电脑来代替人工,爬虫程序就这样诞生了。

在此之前,我们应该先简单了解下网页内容渲染机制。

网页渲染机制


上图是 WEB 页面交互的简单模型,不谈及安全机制、浏览器兼容等😄。

常见自动化程序方案

所谓的自动化程序,就是用机器大批量地发起请求,拿到响应后再做处理。专业术语叫做网页爬虫或者网页机器人

模拟请求(基于代码或爬虫框架)

此方案需要我们至少熟悉一门编程语言(Python、Node.js、Java等),自行编写代码或者借助优秀的开源爬虫框架,实现数据获取。某些场景,还需要通过抓包分析目标网站的参数规则,然后通过组合式请求方能达到目的。

这里罗列下我用过或收藏且还在不断更新维护的框架:

名称开发语言简介
ScrapyPythonA fast high-level web crawling & scraping framework for Python.
PyspiderPythonA Powerful Spider(Web Crawler) System in Python.
NutchJava一种高度可扩展、可伸缩的开源 Web 爬虫软件项目。功能强大,支持 Hadoop 集群内运行
webmagicJava一个简单灵活的Java爬虫框架。基于WebMagic,你可以快速开发出一个高效、易维护的爬虫。真的非常简单😄
Spiderman2Java开源Web数据抽取工具,我没实际使用过
node-crawlerNode.jsWeb Crawler/Spider for NodeJS + server-side jQuery 😉

开发者工具 F12 🛠️

首先访问目标网站,按需进行登录,然后按下键盘 F12(或者 Ctrl+Shift+I)进入开发者工具,可以在控制台中写或贴入 JS 脚本,回车收尾😎。

这是我常用的一种方式,用户验证脚本跟少规模作业。

自动化测试工具(Selenium/Puppeteer/Playwright)

WEB 自动化测试工具,是指通过程序代替人工完成验证 WEB 功能的过程。当然,也能利用它来抓取数据。这类工具通过驱动程序(webdriver、DevTools Protocol),驱使浏览器执行既定的动作/脚本。

  • Selenium:老牌大哥,我最开始接触的自动化测试工具,支持 Chrome、Edge、Firefox、IE、Safari 等浏览器,对开发语言支持也很广:Java、Python、C#、Ruby、JavaScript
  • Puppeteer: Chrome 开发团队在 2017 年发布的一个 Node.js 包,用来模拟 Chrome 浏览器的运行。主打对 Chrome 的良好支持,社区有针对 Java、Python 版本。
  • Playwright:微软大厂出品,浏览器支持 Chrome、Edge、Firefox、Safari,官方提供 Java、Python、Node.js、C# 编程语言的 SDK。

Electron / Traui

这两个软件跟上一节工具基本一致,之所以单独列出来,是因为它们提供了更丰富的接口,既能控制浏览器完成任务,又可以制作 GUI 界面(可用于与爬虫程序交互)。

2019年那会,我用闲余时间基于 Electron 做了个小玩具:

浏览器扩展(插件)

官方应该叫做浏览器扩展(Extensions),但是我们习惯叫做插件😄,后续文章我将重点以此方式进行实践。

浏览器扩展(插件)是运行在特定浏览器,遵循相关规范的应用程序包,由 JS、CSS、HTML 组成,能够管理标签页、注入代码、操作DOM、监控页面活动等。

插件功能非常强大,具体的文档详见Chrome Extensions Document。不过有一个小遗憾是不能在插件内打开标签页的开发者工具,官方给出的回答是出于安全考虑。

有大佬做的强大插件webscraper插件(本地使用免费)👍。

小结

我们在做数据采集时,可以根据实际情况灵活选择方案。不过,无论是何种方式,都要随着目标网站的更新迭代,做相应的适配,否则会出现程序无效的情况,而这是一个耗时耗力的过程🙂。

另外,部分网站会对自动化测试工具进行检测,可以参考:bot.sannysoft.com/,正常浏览器会看到如下的结果图。

拦路虎🧱

拦路虎之 IP 限制

当 ip 被限制,就无法正常访问网站或服务。我们的请求很可能被防火墙、网关、WAF(Web 应用防护系统)等前置设备、应用拦截,压根没有到藏在后面的网站。常用应对方式是更换终端IP,比如用代理。

拦路虎之验证码

验证码就是用来拦截爬虫程序的,常见有字符图片验证码(数字+字母+中文,再来点干扰线跟字符变形,增加识别成本),也会有逻辑交互类,以及手机/邮箱接收验证码。
字符类验证码
现代验证码越来越先进(下图是网易网盾首页列出来的常见类型),即使对正常用户也是很艰难才能完成验证。
来自网易网盾首页
这里不得不提一下谷歌「我不是机器人」的验证:reCAPTCHA ,没少被它蹂躏🤣。但是关于 reCAPTCHA 又有一个让我觉得非常惊艳的故事,是关于如何把人类纸质书数字化的,当时靠人工、机器字符识别的效率、效果都不行,于是该公司(后来被谷歌收购)想到把书籍扫描件分割为无数个小图,显示为验证码,让用户进行识别,然后得到最多的结果作为纸质书内容的数字字符(会有算法的参与),具体的看这篇文章:你以为自己在填验证码,其实你是在给Google义务劳动。

这真是太酷了!全人类共同参与到知识数字化进程中来,是在为人类文明做贡献,想想就很激动👏。

聊完常见验证码,是不是要开始说下怎么怎么自动识别它们?

对于文字型可以用OCR,简单交互类的可以用脚本模拟人工拖拽动作,逻辑类的话就难很多,需要对症下药。当然也可以花钱调商用接口,我用过的有超级鹰。

拦路虎之行为检测

关于行为检测,我没有深入了解,只是在一个爬取某国外社交平台数据时,直接告诉我,是因为操作路径每次都一样而被拦截😒。

结语

有数据的地方就有江湖,爬取与反爬取,是一个长期博弈的过程。今天道高一尺,明日魔高一丈,唯有不断学习进步,方能跬步前行。

此外,数据采集是整个流程的第一环,以后还需要对数据进行清洗、真假鉴定、切割分类、打标签等等。就好比厨房做菜,采集即为买菜回来,接着要挑选、洗菜、切菜、烹饪、摆盘、上桌、洗碗刷盘。

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

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

相关文章

mobile app 安全扫描工具MobSF了解下

可以干啥: static 静态分析 dynamic 动态分析 可以用来渗透了 如何docker安装 docker image 下载地址https://hub.docker.com/r/opensecurity/mobile-security-framework-mobsf/ setup 两行即可 1 docker pull opensecurity/mobile-security-framework-mobsf…

年轻人怎么搞钱?

年轻人想要搞钱,可以考虑以下几个方面: 1. 创业:年轻人可以通过自己的创意,找到一个市场的空缺,开创自己的业务。可以从比较小的项目开始,逐渐扩大范围,积累经验和财富。 2. 投资:…

Hadoop之HDFS——【模块二】数据管理

一、Namespace的概述 1.1.集群与命名空间的关系 类似于大集群与小集群之间的关系,彼此之间独立又相互依存。每个namespace彼此独立,Namespace工作时只负责维护本区域的数据,同时所有的namespace维护的文件都可以共用DataNode节点,为了区分数据属于哪些Namespace,DataNode…

强大而灵活的python装饰器

装饰器(Decorators) 一、概述 在Python中,装饰器是一种特殊类型的函数,它允许我们修改或增强其他函数的功能,而无需修改其源代码。装饰器在函数定义之后立即调用,并以函数对象作为参数。装饰器返回一个新…

CrossOver 24下载-CrossOver 24 for Mac下载 v24.0.0中文永久版

CrossOver 24是一款可以让mac用户能够自由运行和游戏windows游戏软件的虚拟机类应用,虽然能够虚拟windows但是却并不是一款虚拟机,也不需要重启系统或者启动虚拟机,类似于一种能够让mac系统直接运行windows软件的插件。它以其出色的跨平台兼容…

NVMe开发——PCIe复位

简介 PCIe中有4种复位机制,早期的3种被称为传统复位(Conventional Reset)。传统复位中的前2种又称为基本复位(Fundamental Resets),分别为冷复位(Cold Reset),暖复位(Warm Reset)。第3种复位为热复位(Hot Reset)。第4种复位被称为功能级复位…

179基于matlab的2D-VMD处理图像

基于matlab的2D-VMD处理图像,将图片进行VMD分解,得到K个子模态图,将每个模态图进行重构,得到近似的原图。可以利用这点进行图像去噪。程序已调通,可直接运行。 179 2D-VMD 图像分解重构 图像处理 (xiaohongshu.com)

每日五道java面试题之spring篇(九)

目录: 第一题. 说一下Spring的事务传播行为第二题. 说一下 spring 的事务隔离?第三题. Spring AOP and AspectJ AOP 有什么区别?AOP 有哪些实现方式?第四题. JDK动态代理和CGLIB动态代理的区别第五题. 解释一下Spring AOP里面的几…

【白嫖8k买的机构vip教程】Appium自动化(3):Appium-Desktop界面介绍

Appium-Desktop主界面包含三个菜单Simple、Advanced、Presets Simple界面: Host设置Appium server的ip地址,本地调试可以将ip地址修改为127.0.0.1;Port设置端口号,默认是4723不用修改Start Server 启动 Appium serverEdit Confi…

重生奇迹MU玩家容易遇到的问题

1、玩家可以在画面左上角座标旁找到「奇迹助手」的小按钮,用它来开启介面。 2、打怪范围:自动寻找所设定范围内的怪物,勾选后角色搜索范围内若无可攻击的目标,将会随机移动位置直到有攻击目标为止,但移动范围不超出所…

搭建LNMP环境并搭建论坛和博客

目录 一、LNMP架构原理 二、编译安装Nginx 三、编译安装MySQL 四、编译安装PHP 五、配置Nginx支持PHP解析 六、安装论坛 七、安装博客 一、LNMP架构原理 LNMP架构,是指在Linux平台下,由运行Nginx的web服务器,运行PHP的动态页面解析程序…

Python:练习:编写一个程序,录入一个美元数量(int),然后显示出增加%5税率后的相应金额。

案例: 编写一个程序,录入一个美元数量(int),然后显示出增加%5税率后的相应金额。格式如下所示: Enter an amount:100 With tax added:$105.0 思考: 1、录入一个美元数量,录入&am…

解决GitHub无法访问的问题:手动修改hosts文件与使用SwitchHosts工具

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua,在这里我会分享我的知识和经验。&#x…

SpringBoot原理-配置优先级(黑马学习笔记)

配置优先级 在我们前面的课程当中,我们已经讲解了SpringBoot项目当中支持的三类配置文件: ● application.properties ● application.yml ● application.yaml 在SpringBoot项目当中,我们要想配置一个属性,可以通过这三种方…

Liunx前后端项目部署(小白也可安装)

文章目录 一、CentOS服务器的安装二、jdk安装三、Tomcat安装四、MySQL安装、五、nginX安装六、多个项目负载均衡,部署后端项目七、前端项目部署 一、CentOS服务器的安装 选择liunx,下面选择CentOS 7 ![在这里插入图片描述](https://img-blog.csdnimg.cn…

一文讲透:可视化大屏中3D元素的融入和使用方法

在可视化大屏中,3D元素融入的越来越多,贝格前端工场经常接到这类项目,很多老铁认为加个3D效果很easy,其实不然,工序非常复杂,总结如下。 一、什么是3D技术 三维展示(3D展示)是指使用…

[BUUCTF]-Reverse:reverse3解析

查看ida 从下图的/3和*4可以推断得出来是base64加密。 ida里大致意思就是我们输入的字符串经过base64加密,循环递减,最后等于str2,那我们输入的字符串就是flag。 完整exp: import base64 liste3nifIH9b_CndH print(len(list))fl…

循环简介和基本运算符

根据C Primer Plus第五章进行学习 文章目录 循环简介基本运算符 1.赋值运算符&#xff1a;2.加法运算符&#xff1a;3.减法运算符&#xff1a;-2.乘法运算符&#xff1a;*总结 1.循环简介 如下代码可以体现不使用循环的局限性&#xff1a; #include<stdio.h> #define AD…

【leetcode热题】杨辉三角 II

难度&#xff1a; 简单通过率&#xff1a; 41.1%题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个非负索引 k&#xff0c;其中 k ≤ 33&#xff0c;返回杨辉三角的第 k 行。 在杨辉三角中&#xff0c;每个数是它左上方和右上方的数的和。 示…

Doris实战——金融壹账通指标中台的应用实践

目录 前言 一、业务痛点 二、早期架构挑战 三、架构升级 四、一体化指标数据平台 4.1 构建指标体系 4.2 构建指标平台功能 五、Doris指标应用实践 六、未来规划 原文大佬的这篇指标中台的应用实践有借鉴意义&#xff0c;这里摘抄下来用作学习和知识沉淀。 前言 在搭建…