标签 数据提取 下的文章

基于上一条帖子科研图表 (曲线图) 数据提取工具 (导出 excle 数据),在功能上完善了一下。
[开源] 科研图表 (曲线图) 数据提取工具 (导出 excle 数据) - 开发调优 - LINUX DO

上次的工具只能绘制点,就存在同一 X 存在相同 Y 值,导致出来的数据不太正确,因此增加了图层编辑模式,支持识别颜色的曲线,以及自建图层,自己瞄着画一遍也行


效果如上,可以删除一些无用的线段

然后接可以直接提取数据了,因为代码是 AI 完成的,有些功能达不到我的预期

这就是提取出来的紫色线段的数据了

再就是增加了一个可以直接调用 origin 绘制,直接生成 opju 文件,用 origin 打开,也支持 自定义 LabTalk 代码,但是我没测试




据官方说,仅支持 2022 及以上版本的 origin 才能支持,还有就是交给工具绘制 origin 时,桌面不能打开 origin 必须保持没有 origin 进程才能正常生成 opju 文件。

GitHub 主代码没有更新,但是上传了 releases,支持一键启动,后面有时间把代码更新一下吧。地址:Release V1.0.1 · yyy-OPS/SciDataExtractor

有用的话点点 star~ 谢谢佬友~


📌 转载信息
原作者:
violetreay
转载时间:
2026/1/23 09:00:45

对于可以复制的表格已经有佬友提出过解决方案,但对于创建者禁止复制 & 创建副本 & 下载的飞书多维表格怎么办呢?如果遇到了下图的情况,本文应该可以有些帮助。
【教程】如何提取 & 整理无法复制和下载的飞书多维表格1

打开开发者工具(按 F12 或者 Ctrl+Shift+I),切换到 网络 部分,清空请求后刷新,可以看到好多条刷出来的请求。按照大小从大到小排序后最大的那些就是表格内容部分。

挑选你要下载的表格的请求点进去,在 请求URL 部分可以看到一个链接,手动访问可以看到其加密后的数据:

records 部分复制下来,按经验这是 base64 编码。而其开头 H4sI 是一个很有名的字符串指纹,其 base64 解码后的字节序列是 1f 8b 081f 8b 是 Gzip 压缩文件的文件头,08 表示其使用了 Deflate 压缩算法。

将其先 base64 解密后再解压可以得到一个标准 JSON 文件,我偷懒起见,直接选择了提取其中字符串,过滤无意义内容就能得到最后的清洗过的干净文件了。

最后的清洗部分因为需求和文件不同,也没法给出一个统一的代码,如果有相关问题可以提问,感谢各位佬友。


📌 转载信息
转载时间:
2026/1/20 08:26:51

在数据处理工作中,提取 PDF 文档中的文本和图像坐标是一个常见需求。本文将介绍如何使用 Spire.PDF for Python 库实现这一功能,通过简单的代码示例帮助你快速上手。

Spire.PDF 简介

Spire.PDF for Python 是一个功能强大的 PDF 处理库,允许开发者以编程方式操作 PDF 文件。它支持提取文本、图像、元数据等。当我们需要获取特定文本或图像的坐标时,这个库显得尤为便捷。

安装命令:pip install spire-pdf

坐标系设定

在 Spire.PDF 中,坐标系设定非常重要:

  1. 原点 (0, 0) 位于页面的左上角。
  2. X 轴向右延伸,Y 轴向下延伸。

理解这一点有助于我们更好地定位 PDF 中的元素。

获取文本坐标

以下是使用 Spire.PDF 提取 PDF 中指定文本坐标的步骤:

  1. 创建 PdfDocument 对象。
  2. 加载 PDF 文档。
  3. 获取特定页面。
  4. 创建 PdfTextFinder 对象并设置查找选项。
  5. 查找文本并获取其坐标。

下面是获取文本坐标的示例代码:

from spire.pdf.common import *
from spire.pdf import *

# 创建 PdfDocument 对象
doc = PdfDocument()

# 加载 PDF 文档
doc.LoadFromFile("Input.pdf")

# 获取特定页面
page = doc.Pages.get_Item(0)

# 创建 PdfTextFinder 对象
textFinder = PdfTextFinder(page)

# 指定查找选项
findOptions = PdfTextFindOptions()
findOptions.Parameter = TextFindParameter.WholeWord
textFinder.Options = findOptions

# 在页面中查找字符串 "隐私政策"
findResults = textFinder.Find("隐私政策")

# 获取查找结果中第一个实例
result = findResults[0]

# 获取找到文本的 X/Y 坐标
x = int(result.Positions[0].X)
y = int(result.Positions[0].Y)
print("The coordinates of the first instance of the found text are:", (x, y))

# 释放资源
doc.Dispose()

代码解析

  • PdfDocument 对象用于打开现有 PDF 文件。
  • 通过 PdfTextFinder 可以轻松找到指定文本,设置的查找选项允许忽略大小写并确保匹配完整单词。
  • 最后,通过 result.Positions 获取文本坐标,其中 (0, 0) 表示页面的左上角。

获取图片坐标

获取图像坐标的过程与文本提取类似,但使用 PdfImageHelper 处理图像信息。以下是示例代码:

from spire.pdf.common import *
from spire.pdf import *

# 创建 PdfDocument 对象
doc = PdfDocument()

# 加载 PDF 文档
doc.LoadFromFile("Input.pdf")

# 获取特定页面
page = doc.Pages.get_Item(0)

# 创建 PdfImageHelper 对象
imageHelper = PdfImageHelper()

# 获取页面中的图像信息
imageInformation = imageHelper.GetImagesInfo(page)

# 获取指定图像的 X/Y 坐标
x = int(imageInformation[0].Bounds.X)
y = int(imageInformation[0].Bounds.Y)
print("The coordinates of the specified image are:", (x, y))

# 释放资源
doc.Dispose()

代码解析

  • 使用 PdfImageHelper 类来获取特定页面上的所有图像信息。
  • 通过 imageInformation 对象获取图像的边界坐标(X, Y),便于后续处理。

总结

本文介绍了如何使用 Spire.PDF for Python 提取 PDF 中文本及图像的坐标,并提供了相关示例代码。无论是在信息提取、数据分析,还是文档处理方面,掌握这些技术都将极大提升你的工作效率。希望这篇博客能帮助你快速上手 PDF 坐标提取的相关操作!

最近一直在折腾 AI Agent ,发现让 Agent 可靠地与 Web 交互是个大难题,现有工具要么太底层,要么不够灵活。所以动手撸了一个轮子: @isdk/web-fetcher,想和大家分享一下,也希望能得到一些反馈。

解决了什么痛点?

你可能会问,为啥不用 fetch 或 Playwright/Crawlee ?

  • fetch 拿不到 JS 动态渲染的内容,对现代网页基本没用。
  • Playwright 虽然强大,但需要写大量命令式的过程代码 (await page.click(...) 等),不仅繁琐,而且 AI (比如 LLM) 很难直接生成这种复杂的逻辑。

我不想重复造轮子,所以底层用了Crawlee 库来处理。

我的目标是在 Crawlee 之上构建一个跨引擎一致性:抽象/模拟 HTTP 与 Browser 的共有行为,声明式的“意图层”,让 AI 可以通过生成简单的 JSON 来“指挥”浏览器完成任务,而不是去写具体的执行代码。

核心功能

  • ⚙️ 双引擎架构: 你可以选择 http 模式(基于 Cheerio )来极速抓取静态内容,也可以用 browser 模式(基于 Playwright )来处理复杂的动态网页。
  • ✨ 统一的操作模型 (核心设计): 这是最关键的一点。我抽象了 http 和 browser 模式下的共性行为。无论底层用哪个引擎,你都使用同一套 actions API 。比如 extract (提取数据) 这个操作,在 http 模式下它会通过 Cheerio 解析静态 HTML ,在 browser 模式下它会操作浏览器渲染后的 DOM 。你只需要学习一套 API ,库在内部完成了适配和翻译。
  • ? 声明式操作脚本: 基于统一的模型,你可以用 JSON 定义一个多步骤任务流(登录、填表、点击),AI 生成这个 JSON 的成本远低于生成 JS 代码。
  • ? 强大的数据提取: 同样是声明式的 Schema ,轻松从页面提取结构化数据。
  • ?️ 内置反爬: browser 模式下开启 antibot: true,能处理一些常见的 Cloudflare 挑战。
  • ? 易于扩展: 可以自己封装常用的操作,比如把“登录知乎”封装成一个 loginToZhihu 的自定义动作。

快速上手:提取个标题

注意,下面的代码不关心目标 URL 是静态还是动态的,extract 操作在两种模式下都有效。

import { fetchWeb } from '@isdk/web-fetcher';
async function getTitle(url: string) {
  const { outputs } = await fetchWeb({
    url,
    actions: [
      {
        id: 'extract',
        params: {
          selector: 'title', // 提取 <title> 标签内容
        },
        storeAs: 'pageTitle', // 结果存到 outputs.pageTitle
      },
    ],
  });
  console.log('页面标题:', outputs.pageTitle);
}
getTitle('https://blog.xiaohack.org');

进阶玩法:多步表单提交 (Google 搜索)

这个例子展示了如何用 JSON 指挥浏览器执行一系列动作。

import { fetchWeb } from '@isdk/web-fetcher';
async function searchGoogle(query: string) {
  const { result } = await fetchWeb({
    url: 'https://www.google.com',
    engine: 'browser', // 显式指定需要浏览器环境
    actions: [
      // 步骤 1: 找到输入框并填入内容
      { id: 'fill', params: { selector: 'textarea[name=q]', value: query } },
      // 步骤 2: 提交表单
      { id: 'submit', params: { selector: 'form' } },
      // 步骤 3: 等待搜索结果容器加载出来
      { id: 'waitFor', params: { selector: '#search' } },
    ]
  });
  console.log('搜索结果页 URL:', result?.finalUrl);
}
searchGoogle('xiaohack');

项目状态

项目刚起步,核心架构已经搭好。下一步计划是实现更智能的抓取策略(比如发现 http 模式拿不到内容时,自动升级到 browser 模式)。

项目是开源的,欢迎大家试用、Star 、提 Issue ,或者狠狠地拍砖!感谢。