|
网络爬虫在各种语言中都有实现,譬如 Java, Kotlin, Javascript, Python, Go, C++ 等。随着网站变得越来越复杂,页面变动越来越频繁,越来越多的网站由 Vue,React 等技术动态生成,建议网络爬虫直接从浏览器自动化工具开始。
浏览器自动化工具提供了编程驱动真实浏览器的能力,使得程序可以像真人一样访问网页,采集数据,譬如 Selenium,Playwright,Puppeteer,Crawlee,PulsarR 等。
浏览器自动化工具本身由某一种语言编写,但往往对使用者提供了多种语言绑定。譬如,Selenium 由 Java 编写,但是提供了 Java, Python, C#, Ruby, JavaScript, Perl, PHP, R, Objective-C, Haskell 这些语言的编程接口;Playwright 由 Javascript 写成,但是提供了 JavaScript, Java, Python, C# 的编程接口。
尤其不建议再用 Requests, Scrapy 等原始工具了,不要陷入花里胡哨、无穷无尽的爬虫对抗中,这种对抗很多时候是一条死胡同,譬如采用动态自定义字体技术,已经可以彻底阻断 HTTP 抓包方式的采集了。
很多人认为 Requests, Scrapy 等原始工具的具有效率优势,这并不正确:
- 数据点缺失。现代网页数据会由多次异步请求返回组合,原始工具获得的数据点比浏览器少很多
- 效率假象。对浏览器进行优化和合理配置,譬如屏蔽无关资源,效率可以和原始 HTTP 媲美
- 成本考虑。同人力成本相比,硬件很便宜
- 爬虫对抗。目标站点的基础反爬机制迫使原始工具主动降低访问频率
- 风险规避。对单一资源进行超出常规的访问会被视作 DDOS 攻击,从而带来法律风险
- 其他效率相关弊病
如果您的焦点是解决当前问题,暂不考虑后续业务发展,那么 Crawlee/PulsarR 都是很好的选择,它们是开箱即用的,解决了阻挡在你和网页数据之间的绝大多数拦路虎。此时不建议选用 Selenium,Playwright,Puppeteer 等,如果使用它们,还有一大批技术问题需要解决。
如果您的业务要求解决以下问题:
- 连续采集
- 大规模分布式
- 任务调度
- 性能保证
- 数据质量保证
- 系统架构设计
- API 设计
- 机器人流程自动化(RPA)
- 高级数据采集语言
- 高级信息提取算法
- 增强分析
- 机器学习
- 弹性计算
- 云化服务
- 存储处理
- 运维工具
- 降低数据获取成本
- 降低团队技能要求
- 提高数据规模
- 解决数据融合问题
- 提升时效价值
- 提高系统可维护性
或者如果您是专业人士,需要解决最具挑战的网络数据采集问题,譬如:
- 每日采集百万量级电商页面,或者数亿量级数据点,以满足市场调查和竞品分析的需要
- 采集数千个网站并降低规则失效率
- 采集整个互联网并建立搜索引擎、信息流产品或者知识图谱
- 开发一款供非技术人员用的“数据采集器”
- 架设自己的数据采集公有云
那么,PulsarR 是你唯一的选择。
PulsarR 为解决网络数据管理、多源异构数据融合、数据采集等问题,开发了一系列基础设施和前沿技术。类似 Playwright 这样的浏览器驱动,在 PulsarR 中仅仅只是一个不大的子系统,可见单单 Playwright 能够解决的问题极其有限。为了性能、稳定性、容错性等考虑,我们也不会使用 Playwright 作为浏览器驱动,而是基于 CDP 从头开发。
传统数据采集方案有哪些问题?
网络数据管理的核心难题是持续降低总体拥有成本。网络爬虫的难点在于数据规模、数据质量、综合性能、人力维护成本、硬件支出等,这些难题构成了总体拥有成本的难题。
具体来看:
- 数据能采集到(难)
- 数据质量和调度质量保证(难难)
- 运行性能和机器成本(难难难)
- 业务和数据分析(难)
- 大批量站点的信息抽取(难难难)
- 构建知识图谱(难难难难)
目前大家常用的主流的数据采集软件,包括 selenium, playwright, puppeteer 等,不是为数据采集开发的,不适合数据采集;而大家熟知的 scrapy, requests 等,已经越来越不适应现代网页了。
一、现在主流网站常用的反爬手段基本都用了,譬如Cookie跟踪,IP跟踪,访问频率限制,访问轨迹跟踪,CSS 混淆等等。
二、使用基本的 HTTP 协议采集,如 requests, scrapy, jsoup, nutch 等,会陷入无穷无尽的爬虫/反爬虫对抗中,得不偿失,并且未必能解决,譬如说采用了动态自定义字体的站点就不可能解决。
三、使用浏览器自动化工具如 selenium, playwright, puppeteer 等进行数据采集,会被检测出来并直接屏蔽。
四、使用 puppeteer-extra, apify/crawlee 这样的工具,虽然提供了 WebDriver 隐身特性,一定程度上缓解了这个问题,但仍然没有完全解决。
- 上述工具没有解决访问轨迹跟踪问题
- Headless 模式能够被检测出来。云端爬虫通常以 headless 模式运行,即使做了 WebDriver 隐身, headless 模式也能够被检测出来
- 其他爬虫对抗问题
即使解决完上述问题,也仅仅是入门而已。在稍稍正式一点的采集场景下,仍然面临诸多困难:
- 如何正确轮换IP,触发条件是什么?事实上,仅轮换IP是不够的,需要“隐私上下文轮换”
- 如何使用单台机器每天提取数千万数据点?
- 如何保证数据准确性?
- 如何保证调度准确性?
- 如何保证分布式系统弹性?
- 如何正确提取 CSS 混淆 的字段,它的 CSSPath/XPath/Regex 每个网页都不同,怎么解决?
- 如何采集数百个电商站点并避免爬虫失效?
- 如何降低总体拥有成本?
解决方案
PulsarR(国内镜像)为解决网络数据管理、多源异构数据融合、数据采集等问题,开发了一系列基础设施和前沿技术:支持高质量的大规模数据采集和处理,支持网络即数据库范式,支持浏览器渲染并将其作为数据采集的首要方法,支持 RPA 采集,支持退化的单一资源采集,并计划支持最前沿的信息提取技术,提供了人工智能网页提取的预览版本。
PulsarR 提供了大量顶级站点的采集示例,从入门到资深,包含各种采集模式,包括顶尖大站的全站采集代码、反爬天花板的站点的采集示例,您可以基于代码示例开始利益攸关的大数据项目:
- Exotic Amazon,国内镜像 - 全球 TOP 1 电商网站全站数据采集真实项目
- Exotic Walmart,国内镜像 - 顶尖电商网站数据采集示例
- Exotic Dianping,国内镜像 - 最困难的数据采集示例
PulsarR 支持高质量的大规模数据采集和处理。PulsarR 开发了一系列基础设施和前沿技术,来保证即使是大规模数据采集场景,也能达到最高标准的性能、质量和总体拥有成本。
PulsarR 支持网络即数据库范式。PulsarR 像对待内部数据库一样对待外部网络,如果需要的数据不在本地存储中,或者现存版本不满足分析需要,则系统会从互联网上采集该数据的最新版本。我们还开发了 X-SQL 来直接查询互联网,并将网页转换成表格和图表。
PulsarR 支持浏览器渲染并将其作为数据采集的首要方法。将浏览器渲染作为数据采集的首要方法,我们在数据点规模、数据质量、人力成本和硬件成本之间实现了最佳平衡,并实现了最低的总体拥有成本。通过优化,如屏蔽不相关的资源文件,浏览器渲染的性能甚至可以与传统的单一资源采集方法相媲美。
PulsarR 支持 RPA 采集。PulsarR 包含一个 RPA 子系统,来实现网页交互:滚动、打字、屏幕捕获、鼠标拖放、点击等。该子系统和大家所熟知的 selenium, playwright, puppeteer 是类似的,但对所有行为进行了优化,譬如更真实的模拟操作,更好的执行性能,更好的并行性,更好的容错处理,等等。
PulsarR 支持退化的单一资源采集。PulsarR 的默认采集方式是通过浏览器渲染来采集完整的网页数据,如果您需要的数据可以通过单一接口获取,譬如可以通过某个 ajax 接口返回,也可以调用 PulsarR 的资源采集方法进行高速采集。
PulsarR 计划支持最前沿的信息提取技术。我们计划发布一个先进的人工智能,以显著的精度自动提取所有网页(譬如商品详情页)中的每一个字段,目前我们提供了一个预览版本,国内镜像。 |
|