一键把网页转成 LLM 友好格式的工具?

作为一个爬虫 er,开发爬虫最痛苦的就是手写 xpath 了。

虽然有很多自动抽取工具,但适配总是不够好。

自从大模型出现后,就一直想着用 AI 来解决它,但一直调不好 prompt。

等了几年,终于是等来了Jina Reader ~

比如这里用澎湃新闻来做一个测试:

标题、内容、图片地址都准确的提取到了,同时格式非常标准,易于理解

甚至在连最后的引用也能准确提取到!

你可以直接扔到知识库里,也可以自己再做一些处理,摸鱼时间大大增加!

那么什么是 Jina Reader? 🤔

Jina Reader 是一个由 Jina AI 开发的智能网页内容提取工具。

它不只是一个传统的爬虫,而是一个能"看懂"网页的AI

你可以把它想象成一个拥有阅读理解能力的机器人:你给它一个网页链接,它就能自动识别出文章标题、正文、图片的位置,然后把这些核心内容提取出来,再把那些烦人的广告、导航栏、页脚、侧边栏统统丢掉。

传统爬虫往往需要你手动编写复杂的规则(比如XPathCSS Selector )来定位网页元素,但Jina Reader利用深度学习技术,能像人一样理解网页的布局和语义。

这意味着,即使网页结构发生变化,Jina Reader也能大概率保持准确的内容提取能力,极大地减少了维护成本。


Jina AI Reader 的优势

  • LLM 友好: 专门为 LLM 优化输出,减少了 LLM 处理冗余信息和不规则格式的开销。
  • 简单易用: 只需要一个简单的 URL 前缀或 API 调用。
  • 免费可用: 免费爬取任何网页
  • 处理复杂网页: 能够有效处理 JavaScript 渲染的现代网站。
  • 提升 AI 代理和 RAG 系统: 提供了高质量、结构化的输入数据,对于构建强大的 AI 代理和检索增强生成(RAG)系统非常有帮助。

Jina Reader 解决了什么问题?(告别 XPath 噩梦! 👋)

手写XPath来提取网页内容是个体力活,而且痛点多多:

  • 费时费力: 面对一个新网站,你可能要花几小时甚至几天去分析HTML结构,编写和测试XPath规则。而Jina Reader可能只需要几秒钟就能返回干净的内容。

  • 脆弱易断: 网页设计师一旦改动页面布局,你的XPath规则可能就失效了。📈 这意味着你需要频繁地更新和维护你的爬虫代码。Jina Reader因为其AI能力,对这种结构变化有更好的鲁棒性,减少了90%以上的维护工作量。

  • 内容混杂: 即使你成功提取了文本,里面可能还夹杂着大量的广告、推荐内容、社交分享按钮等噪音。Jina Reader 的目标就是提供纯净的阅读内容,去除高达80%的无关信息。

  • 学习成本高: 对于新手来说,学习HTML DOM、XPath、CSS Selector本身就需要一定的门槛。Jina Reader把这些复杂性都封装起来,你只需要懂HTTP请求就行。

Jina Reader 主要是把你从繁琐的XPath规则中解放出来,

用AI帮你智能识别并提取网页的核心内容,让爬虫变得像复制粘贴一样简单!

Jina AI Reader 的使用方法

Jina AI Reader 的使用非常简单和直接,主要有两种核心用法:

官方把 api 作为他们的核心竞争力,免费提供使用,基本就是发个HTTP请求的事儿。

1. 读取单个 URL 的内容 (r.jina.ai)

这是最常见也最方便的用法。你只需要在要读取的 URL 前面加上 https://r.jina.ai/ 作为前缀。

示例:

如果你想获取 https://www.example.com 的内容,只需访问: https://r.jina.ai/https://www.example.com

你可以在浏览器中直接尝试: 打开你的浏览器,然后在地址栏输入 https://r.jina.ai/https://www.google.com (或者任何你感兴趣的网站),你会看到返回的是一个 Markdown 格式的网页内容。

在代码中使用 (例如 Python):

你可以使用 requests 库来发起 HTTP 请求:

python 复制代码
import requests  
  
url_to_read = "https://www.simonwillison.net/2024/Jun/16/jina-ai-reader/"  
jina_reader_url = f"https://r.jina.ai/{url_to_read}"  
  
try:  
    response = requests.get(jina_reader_url)  
    response.raise_for_status() # 检查请求是否成功  
  
    markdown_content = response.text  
    print(markdown_content[:1000]) # 打印前1000个字符,内容可能很长  
  
except requests.exceptions.RequestException as e:  
    print(f"请求失败: {e}")

2. 进行网络搜索并获取结果内容 (s.jina.ai)

Jina AI Reader 也提供了一个搜索功能,它会使用 Brave Search API 进行搜索,然后自动抓取排名前几的搜索结果页面的内容,并将其转换为 Markdown。

示例:

如果你想搜索 "Jina AI Reader usage" 的相关内容,可以访问: https://s.jina.ai/Jina+AI+Reader+usage

注意:搜索词中的空格需要用 + 替代。

在代码中使用 (使用 Python作为示例):

python 复制代码
import requests  
import urllib.parse # 用于编码 URL  
  
search_query = "Jina AI Reader tutorial"  
encoded_query = urllib.parse.quote(search_query) # 编码搜索词,确保URL正确  
jina_search_url = f"https://s.jina.ai/{encoded_query}"  
  
try:  
    response = requests.get(jina_search_url)  
    response.raise_for_status()  
  
    search_results_markdown = response.text  
    print(search_results_markdown[:2000]) # 打印前2000个字符  
  
except requests.exceptions.RequestException as e:  
    print(f"请求失败: {e}")

高级用法和定制

Jina AI Reader 还支持一些 HTTP 请求头来定制输出:

  • X-Respond-With: 控制输出格式。

    • markdown (默认): 返回 Markdown 格式内容。
    • html: 返回经过清理但仍是 HTML 格式的内容。
    • text: 返回纯文本内容。
    • screenshot: 返回网页截图的 URL。
  • X-Target-Selector: 如果默认内容提取不准确,你可以指定一个 CSS 选择器,让 Reader 只提取该选择器匹配的元素内容。

  • X-Wait-For-Selector: 对于动态加载内容的页面,可以指定一个 CSS 选择器,Reader 会等待该元素出现后再提取内容。

  • Accept: text/event-stream: 开启流式模式,对于大型或动态页面,这可以让你在内容可用时立即接收,而不是等待整个页面加载完毕。

  • X-API-Key: 虽然 Jina AI Reader 提供免费调用,但也不能一直薅~ 公共API会有速率限制(rate limit),基本的爬虫api 大概 20次/分钟。但通过 Jina AI 官网 注册并获取 API Key 后,你可以获得更高的速率限制。

  • 返回格式: 默认情况下,Jina Reader会返回Markdown格式的纯净文本内容。这非常适合直接展示在阅读器应用中,或者给大模型进一步处理。

如果你的请求量很大,可能需要考虑付费套餐或私有部署。

私有部署方式

Jina Reader 的核心组件是开源的!🎉 你可以在GitHub上找到它的开源代码,这意味着你可以在自己的环境中部署它。

  • Docker 部署: 最推荐的方式。Jina Reader通常会提供一个Docker镜像,你只需要几条Docker命令就能启动一个本地服务。这大大简化了部署过程。

    • 优点: 隔离性好,环境配置简单,方便扩展。

    • 示例命令:

shell 复制代码
# 1. 拉取镜像
docker pull ghcr.io/intergalacticalvariable/reader:latest  

# 2. 运行容器
docker run -d -p 3000:3000 -v /path/to/local-storage:/app/local-storage --name reader-container ghcr.io/intergalacticalvariable/reader:latest

# 3. 替换`/path/to/local-storage`为您希望存储截图的目录。
  • 源码部署: 如果你需要深度定制或者不想用Docker,也可以直接从源码编译部署。这需要你对Python环境和依赖管理有一定了解。

限制或要求

私有部署虽然提供了更大的灵活性,但也伴随着一些要求和考虑:

  • 硬件资源: Jina Reader是基于深度学习模型的,虽然它的设计已经很轻量级,但在处理大量请求时,仍然需要一定的CPU和内存资源 。如果你要处理高并发请求,可能需要配置多核CPU和至少8GB以上的内存。
  • 网络访问: 你的部署环境需要能够访问到你想要提取内容的外部网页。确保服务器的网络策略允许外网访问。
  • 技术能力: 尽管部署本身可能很简单(特别是Docker),但如果遇到问题,你需要一定的运维和故障排查能力。
  • 维护成本: 你需要负责服务的运行、监控、更新和维护,这与使用SaaS服务不同,需要投入额外精力。
  • 数据隐私: 这是私有部署的最大优势之一。所有数据都在你的控制之下,不会发送到第三方服务。

私有部署是确保数据安全性和自定义能力的首选,但你需要权衡资源投入和技术维护能力。

相关推荐
Lum11042 分钟前
PyCharm高效入门指南大纲
ide·python·pycharm
PyAIExplorer14 分钟前
PyTorch 损失函数详解:从理论到实践
人工智能·pytorch·python
AI 嗯啦17 分钟前
python基础语法9,用os库实现系统操作并用sys库实现文件操作(简单易上手的python语法教学)
开发语言·python
stm 学习ing18 分钟前
Python暑期学习笔记3
笔记·python·学习
靴子学长1 小时前
Lotus-基于大模型的查询引擎 -开源学习整理
python·学习·自然语言处理
真智AI1 小时前
Go与Python在数据管道与分析项目中的抉择:性能与灵活性的较量
人工智能·python·go
摸鱼仙人~1 小时前
Spring Boot 参数校验:@Valid 与 @Validated
java·spring boot·后端
Monkey的自我迭代1 小时前
Python爬虫实战:Requests与Selenium详解
python·网络爬虫
思无邪66751 小时前
从零构建搜索引擎 build demo search engine from scratch
后端
Littlewith2 小时前
Node.js:创建第一个应用
服务器·开发语言·后端·学习·node.js