开源项目开发者工具类新手
mlscraper:通过提供示例自动从 HTML 网页抓取结构化数据
mlscraper 是一个 Python 库,让你无需手写节点路径或 CSS 选择器,只需给出少量期望输出的示例,它就会自动推断抽取规则,并把任意新页面的数据以字典形式返回。项目目前处于 1.0 版本发布前夕,可通过预发布渠道安装体验。
0 次阅读2026/09/15 发布
社区作者 · zZz
它解决什么问题
项目定位
mlscraper 允许你自动从 HTML 页面中抽取结构化数据,而不需要手动指定节点或 CSS 选择器。你只需要提供几个期望输出的示例来“训练”它,它就会自动推断出抽取规则,之后即可对任何新页面执行抽取。
配图 1(Image showing how mlscraper turns html into data objects)展示了 mlscraper 将 HTML 转换为数据对象的过程。
背景故事
作者指出,许多爬取与抓取自动化服务允许用户在浏览器中选择数据并直接得到 JSON 结果,无需指定 CSS 选择器。作者长期疑惑为什么没有开源方案能做到类似效果,于是尝试编写了这个 Python 库来实现自动抓取。使用者只需要定义一些已抓取数据的示例,mlscraper 会推断其余部分并返回干净的数据。
工作原理
在你定义了想要抓取的数据之后,mlscraper 会:
- 在 HTML DOM 中定位你的样本;
- 判断应使用哪些规则/方法进行抽取;
- 为你抽取数据并以字典形式返回。
开发说明与相关项目
- 开发相关说明见仓库中的 CONTRIBUTING.rst。
- 作者原本将项目命名为 autoscraper,但在开发期间有人发布了同名库(autoscraper),作者保留了现在这个更易记的名字。
- 项目最初由机器学习驱动,后来发现使用统计方法搜索启发式规则更快、所需训练数据更少。
适用对象
需要从结构相对稳定的 HTML 页面批量抽取字段(如作者姓名、出生日期等)的 Python 开发者、数据采集与数据分析人员,以及不想维护脆弱 CSS 选择器的爬虫工程师。
— 本文由 AI 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。
安装 / 开始使用
环境准备
- 需要 Python 运行环境,并可通过 requests 访问目标网页(示例中使用 requests 抓取页面)。
- 具体支持的最低 Python 版本来源未说明,待核验。
安装
mlscraper 目前正处于 1.0 版本发布前夕,请按以下方式选择安装渠道:
- 安装 1.0 候选版本(release candidate):
pip install --pre mlscraper- 安装最新的(不稳定的)开发版本,例如用于体验新特性或验证某个缺陷是否已修复:
pip install git+https://github.com/lorey/mlscraper#egg=mlscraper- 注意:在 1.0 正式发布之前,直接执行
pip install mlscraper会安装到过时的 0.* 版本。
首次运行示例
import requests
from mlscraper.html import Page
from mlscraper.samples import Sample, TrainingSet
from mlscraper.training import train_scraper
# fetch the page to train
einstein_url = 'http://quotes.toscrape.com/author/Albert-Einstein/'
resp = requests.get(einstein_url)
assert resp.status_code == 200
# create a sample for Albert Einstein
# please add at least two samples in practice to get meaningful rules!
training_set = TrainingSet()
page = Page(resp.content)
sample = Sample(page, {'name': 'Albert Einstein', 'born': 'March 14, 1879'})
training_set.add_sample(sample)
# train the scraper with the created training set
scraper = train_scraper(training_set)
# scrape another page
resp = requests.get('http://quotes.toscrape.com/author/J-K-Rowling')
result = scraper.get(Page(resp.content))
print(result)
# returns {'name': 'J.K. Rowling', 'born': 'July 31, 1965'}常见问题与提示
- 示例中特别提示:实际使用时请至少添加两个样本,才能得到有意义的抽取规则。
若安装后行为与文档不符,请确认是否误装了 0.* 旧版本,改用 --pre 或
Git 开发版。
- 更多用法示例可查看仓库的 examples 目录,直到更完整的文档发布。
来源教程配图
适用场景
从结构相似的 HTML 页面批量抽取字段并输出字典
用少量标注样本自动生成抽取规则
替代手写 CSS 选择器
构建网页数据采集/爬虫脚本时的字段抽取环节
对多个作者页
商品页等模板化页面做批量信息提取
数据科学场景下把网页内容快速转为结构化数据