[工具/软件] 开源通用网络爬虫框架

0 概述

通用万能爬虫 vs 聚焦领域爬虫

1 Java Spider

spider-flow

20250311 : 1.9k fork / 9.8k star
20230306 : 7.7k star

spider-flow 是一个爬虫平台,以图形化方式定义爬虫流程,无需代码即可实现一个爬虫

  • 项目说明

活跃度低下,最近一次发版在 2020 年,相距已过去5年。

Webmagic 【推荐】

  • URL

Github URL : 10.7K
20230306 : 10.7k star
20250311 : 4.2k fork / 11.5 star

  • Intro

WebMagic是一个简单灵活的Java爬虫框架。基于WebMagic,你可以快速开发出一个高效、易维护的爬虫。

特性:
  简单的API,可快速上手
  模块化的结构,可轻松扩展
  提供多线程和分布式支持
  • 整体架构

Heritrix 3

  • Home URL : heritrix.readthedocs.io/

Heritrix 是一个开源,可扩展的 web 爬虫项目。用户可以使用它来从网上抓取想要的资源。Heritrix 设计成严格按照 robots.txt 文件的排除指示和 META robots 标签。其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑。

  • Github Star : 2.4K

20230306
https://github.com/internetarchive/heritrix3

Selenium WebDriver 【推荐】

<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
	<groupId>org.seleniumhq.selenium</groupId>
	<artifactId>selenium-java</artifactId>
	<version>3.0.1</version>
</dependency>
  • docs & demo

爬虫辅助开发类库

  • jsoup 【推荐】

HTML解析工具
https://jsoup.org/

  • httpclient : http请求框架 【推荐】

https://github.com/nahi/httpclient

  • okhttp : http请求框架 【推荐】

https://github.com/square/okhttp

2 Python Spider

Scrapy 【推荐】

  • Language : Python
  • GitHub Star : 46.4K

20230306: 46.4k star
20250311 : 10.7k fork / 54.5k star

  • URL :

https://scrapy.org/community/
https://github.com/scrapy/scrapy

【简介】
Scrapy 是一种高速的高层 Web 爬取和 Web 采集框架,可用于爬取网站页面,并从页面中抽取结构化数据。
Scrapy 的用途广泛,适用于从数据挖掘、监控到自动化测试。
Scrapy 设计上考虑了从网站抽取特定的信息,它支持使用 CSS 选择器和 XPath 表达式,使开发人员可以聚焦于实现数据抽取。
对于熟悉 Python 的开发人员,只需几分钟就能建立并运行 Scrapy。
支持运行在 Linux、Mac OS 和 Windows 系统上。

【特性】
内置支持从 HTML 和 XML 抽取数据、使用扩展的 CSS 选择器(Selector)和 XPath 表达式等特性。
支持以多种格式(JSON、CSV、XML)生成输出。
基于 Twisted 构建。
稳健的支持,自动检测编码方式。
快速,功能强大。

PySpider 【已停止维护】

  • URL

20250311 : 3.7k fork / 16.5 star

PySpider 是一种 Python 编写的强大 Web 爬虫。
它支持 JavaScript 网页,并具有分布式架构。
PySpider 支持将爬取数据存储在用户选定的后台数据库,包括 MySQL, MongoDB, Redis, SQLite, Elasticsearch 等。
支持开发人员使用 RabbitMQ、Beanstalk 和 Redis 等作为消息队列。
提供强大 Web 界面,具有脚本编辑器、任务监控、项目管理器和结果查看器。
支持对重度 Ajax 网站的爬取。
易于实现适用、快速的爬取。

EasySpider 【个人项目/偏丑/基于Selenium】

  • URL
  • Github Star
  • 20250311 : 4.7k fork / 37.9 star
  • 20240702 : 3.3K fork / 28.4K star

  • Program Langua: JavaScript + Python

  • Document

  • 中国国家知识产权局发明专利,一种自定义提取流程的服务封装系统, 2022年5月。
  • 浙江大学硕士论文,面向WEB应用的智能化服务封装系统设计与实现,2020年6月。
  • Intro
  • EasySpider是一款集成了自动化测试、爬虫和数据采集功能的可视化工具。
  • 它基于图形化界面,用户无需编写复杂的代码,通过简单的拖拽和配置即可实现数据的抓取和处理。
  • 无论是进行网站自动化测试,还是对特定数据进行采集和分析,EasySpider都能够轻松应对。
  • 同时,它还可以单独以命令行的方式进行执行,从而可以很方便的嵌入到其他系统中
  • Demo Blog

Beautifulsoup 【推荐】

  • URL
Beautiful Soup 一种设计用于实现 Web 爬取等快速数据获取项目的 Python 软件库。
它在设计上处于 HTML 或 XML 解析器之上,提供用于迭代、搜索和修改解析树等功能的 Python 操作原语。往往能为开发人员节省数小时乃至数天的工作。
Beautiful Soup 自动将输入文档转换为 Unicode 编码,并将输出文档转换为 UTF-8 编码。
Beautiful Soup 处于一些广为采用的 Python 解析器(例如,lxml 和 html5lib)之上,支持用户尝试使用多种不同的解析策略,并在速度和灵活性上做出权衡。

Selenium WebDriver 【推荐】

  • 参见本文: Java - Selenium WebDriver

FireCrawl : TypeScript / Python 【推荐】

  • FireCrawl是一款创新的爬虫工具,它能够无需站点地图,抓取任何网站的所有可访问子页面。

与传统爬虫工具相比,FireCrawl特别擅长处理使用JavaScript动态生成内容的网站,并且可以转换为LLM-ready的数据。

  • Firecrawl 是一种 API 服务,它获取 URL,抓取它,并将其转换为干净的 markdown。

我们抓取所有可访问的子页面,并为每个子页面提供干净的 markdown。无需站点地图。

  • URL

https://docs.firecrawl.dev/introduction

20250311 : 2.6k fork / 30.2k star

  • 主要功能
  • LLM 就绪格式:markdown、结构化数据、屏幕截图、HTML、链接、元数据
  • 难点:代理、反机器人机制、动态内容(js-rendered)、输出解析、编排
  • 可定制性:排除标签、使用自定义标头在身份验证墙后面爬行、最大爬行深度等......
  • 媒体解析:pdf、docx、图像
  • 可靠性第一:旨在获取您需要的数据 - 无论多么困难
  • 桌面操作:在提取数据之前单击、滚动、输入、等待等
  • 批处理(新):使用新的异步端点同时抓取数千个 URL。
  • 如何使用?

Jina Reader : HTML URL 转 markdown 【闭源/商用/不推荐】

  • URL

https://jina.ai/

  • Jina API

Jina Python库

pip install Jina
  • Jina Python库是一款开源的神经搜索库,它利用深度学习技术为各种数据类型提供高效的搜索解决方案。它特别适用于处理非结构化数据,如文本、图片、音频和视频等。

  • Jina的核心概念包括Flow、Executor和Document等。

其中,Flow是Jina的核心组件,负责管理工作流程的各个阶段;
Executor是一个可插拔的神经网络处理单元,它执行特定的预处理、处理或后处理任务;
Document则是Jina处理的基本单元,代表了各种数据形式。

  • Jina的设计目标是简化跨多语言、多框架的深度学习应用开发,通过独立的执行单元和灵活的流式架构,让开发者可以轻松地构建和部署大规模的神经搜索应用。

  • Jina Reader 的主要功能

  • 网页内容提取:将 HTML 网页转换为纯文本格式,去除不必要的标签和脚本。
  • 格式选择:支持将网页内容输出为 Markdown、HTML、Text、Screenshot、Pageshot 等多种格式。
  • 流模式:适用于大型和动态网页,支持更长时间的页面渲染,确保内容的完整性。
  • JSON模式:输出包含 URL、标题和内容的结构化 JSON 数据,便于后续处理。
  • Alt生成模式:为缺少 alt 标签的图片自动生成描述,帮助 LLMs 更好地理解网页中的图像内容。
  • 目标选择器和等待选择器:用 CSS 选择器指定页面中特定部分的内容提取,或等待特定元素出现后再提取内容。
  • Jina Reader 的技术原理
  • 网页抓取与解析:使用网络爬虫技术抓取网页内容,基于 HTML 解析器解析网页的 DOM 树结构,提取出网页的文本内容。
  • 内容清洗与结构化:清洗 HTML 标签、JavaScript 代码和 CSS 样式,只保留纯文本内容,并识别和提取网页中的标题、段落、链接、图片等结构化元素。
  • 自然语言处理(NLP):对提取的文本进行自然语言处理,提高文本的质量,例如去除停用词、词干提取等,并生成图像的替代文本(alt text)。
  • 动态内容处理:对于单页应用程序(SPA)和动态加载的内容,使用如 Puppeteer 这样的无头浏览器模拟用户交互,等待 JavaScript 执行完成,捕获最终的页面内容。
  • 流式处理与实时解析:支持流式解析网页内容,对于大型和动态网页尤为重要,能实时处理网页内容。

Reader-LM

  • Jina Reader-LMJina AI 发布的两个小型语言模型:Reader-LM-0.5BReader-LM-1.5B

  • 这些模型经过专门训练,可以将原始 HTML 转换为标记符,并且都是多语言模型,支持多达 256K 字节的上下文长度。

Reader-LM 系列旨在高效地应对将开放网络中原始、嘈杂的 HTML 转换为干净的标记符格式的挑战,重点关注成本效益和性能。
这些模型在 HTML 到标记符的转换这一特定任务中的表现优于许多大型模型,而体积却只有它们的几分之一。
Reader-LM 专为个人和企业环境的实际应用而设计,使用 Google Colab 可以轻松测试模型,而生产环境则可以利用 Azure 和 AWS 等平台。
这些模型非常适合在生产环境中自动从开放网络中提取和清理数据,通过将原始 HTML 转换为简洁的标记符,Reader-LM 实现了高效的数据处理,使下游 LLM 更容易从网络内容中总结、推理和生成见解。

项目案例集

CASE1:requests/scrapy(一般网络请求) + selenium(动态渲染网页) + beautifulsoup4(网页内容解析)

  • 参考文献
  • 爬虫常用库

requests、selenium、puppeteer,beautifulsoup4、pyquery、pymysql、pymongo、redis、lxml和scrapy框架

其中发起请求课可以使用requests和scrapy

解析内容可以用 beautifulsoup4,lxml,pyquery

存储内容可以使用 mysql(清洗后的数据) redis(代理池) mongodb(未清洗的数据)

抓取动态渲染的内容可以使用:selenium,puppeteer

  • 增量爬虫

一个网站,本来一共有10页,过段时间之后变成了100页。假设,已经爬取了前10页,为了增量爬取,我们现在只想爬取第11-100页。
因此,为了增量爬取,我们需要将前10页请求的指纹保存下来。以下命令是将内存中的set里指纹保存到本地硬盘的一种方式。

scrapy crawl somespider -s JOBDIR=crawls/somespider-1

但还有更常用的,是将scrapy中的指纹存在一个redis数据库中,这个操作已经有造好轮子了,即scrapy-redis库。

scrapy-redis库将指纹保存在了redis数据库中,是可以持久保存的。
(基于此,还可以实现分布式爬虫,那是另外一个用途了)scrapy-redis库不仅存储了已请求的指纹,还存储了带爬取的请求,这样无论这个爬虫如何重启,每次scrapy从redis中读取要爬取的队列,将爬取后的指纹存在redis中。
如果要爬取的页面的指纹在redis中就忽略,不在就爬取。

FAQ

Q: Jina Reader 与 Fire Crawl 的区别?

Jina Reader 和 FireCrawl 都是用于网页抓取和解析的工具,但它们在功能、使用场景和特性上存在一些区别,以下是它们的主要对比:

特性 Jina Reader FireCrawl
开发背景与目的 由 Jina AI 开发,专注于将网页内容转换为适合 LLM 处理的格式。 由 Mendable 开发,旨在提供一个强大的网页抓取工具,支持复杂任务和多种数据处理。
主要功能 - 提取网页的纯文本或 Markdown 格式内容。
- 支持动态网页处理和流式解析。
- 支持整个网站的抓取,返回 Markdown、HTML、屏幕截图等多种格式。
- 支持 PDF、DOCX 等文件解析。
- 提供代理设置、反爬虫机制处理等功能。
使用方式 - 通过 https://r.jina.ai/ 前缀快速抓取网页。
- 支持 API 调用和自定义参数。
- 提供在线平台和本地运行选项。
- 支持多种编程语言 SDK(如 Python、Node.js、Go 等)。
易用性 用户友好,适合快速提取网页内容。 功能更强大,适合需要复杂任务处理的用户。
输出格式 主要输出纯文本或 Markdown 格式。 支持 Markdown、HTML、屏幕截图、精简 HTML、超链接和元数据等多种格式。
免费额度与限制 提供免费层级,但有速率限制。 提供免费额度,允许每月爬取 500 页。
开源与部署 开源项目,支持自部署。 支持本地运行和托管版本。
对 PDF 的处理能力 不支持 PDF 文件解析。 支持 PDF 文件解析,但效果不如 Jina Reader。

Jina Reader 更适合快速、简单地提取网页内容
而 FireCrawl 在功能上更为强大,适合需要处理复杂任务和多种数据格式的用户。

X 参考文献

posted @ 2023-03-06 19:38  千千寰宇  阅读(628)  评论(0)    收藏  举报