
作为一个爬虫 er,开发爬虫最痛苦的就是手写 xpath 了。
虽然有很多自动抽取工具,但适配总是不够好。
自从大模型出现后,就一直想着用 AI 来解决它,但一直调不好 prompt。
等了几年,终于是等来了Jina Reader ~
比如这里用澎湃新闻来做一个测试:
标题、内容、图片地址都准确的提取到了,同时格式非常标准,易于理解

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

你可以直接扔到知识库里,也可以自己再做一些处理,摸鱼时间大大增加!
那么什么是 Jina Reader? 🤔
Jina Reader 是一个由 Jina AI 开发的智能网页内容提取工具。
它不只是一个传统的爬虫,而是一个能"看懂"网页的AI。
你可以把它想象成一个拥有阅读理解能力的机器人:你给它一个网页链接,它就能自动识别出文章标题、正文、图片的位置,然后把这些核心内容提取出来,再把那些烦人的广告、导航栏、页脚、侧边栏统统丢掉。
传统爬虫往往需要你手动编写复杂的规则(比如XPath 、CSS 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服务不同,需要投入额外精力。
- 数据隐私: 这是私有部署的最大优势之一。所有数据都在你的控制之下,不会发送到第三方服务。
私有部署是确保数据安全性和自定义能力的首选,但你需要权衡资源投入和技术维护能力。