mlscraper是一款Python库,能够自动从HTML页面提取结构化数据,开发者无需手动编写CSS选择器或XPath规则,仅需提供少量目标数据的示例,工具即可自动生成提取规则。

mlscraper核心功能

1、示例驱动

用户通过提供包含目标数据的HTML页面示例(如商品名称与价格),mlscraper会分析DOM结构,识别数据模式。例如,输入包含“Albert Einstein”及其生日的页面后,工具可自动提取其他类似页面的“姓名”与“出生日期”字段。

2、规则自动生成

工具通过统计学方法而非传统机器学习,分析示例中的节点位置、属性特征和文本模式,生成泛化规则,能减少了对大量训练数据的需求,提升提取效率。

3、多场景适用性

支持从静态页面到动态渲染内容的数据抓取,适用于电商价格监控、新闻聚合、社交媒体分析等场景。

快速入门

安装

# 安装预发布版本(支持最新功能)
pip install --pre mlscraper
# 或安装开发版
pip install git+https://github.com/lorey/mlscraper#egg=mlscraper

使用示例

import requests
from mlscraper.html import Page
from mlscraper.samples import Sample, TrainingSet
from mlscraper.training import train_scraper

# 抓取训练页面
resp = requests.get("http://quotes.toscrape.com/author/Albert-Einstein/")
page = Page(resp.content)

# 创建训练样本(至少需两个样本)
training_set = TrainingSet()
sample = Sample(page, {'name': 'Albert Einstein', 'born': 'March 14, 1879'})
training_set.add_sample(sample)

# 训练并应用规则
scraper = train_scraper(training_set)

# 抓取新页面数据
new_page = Page(requests.get("http://quotes.toscrape.com/author/J-K-Rowling").content)
result = scraper.get(new_page)
print(result)  # 输出:{'name': 'J.K、Rowling', 'born': 'July 31, 1965'}

与其他工具对比

传统爬虫库(如Scrapy、BeautifulSoup):需手动编写提取规则,维护成本高。

AutoScraper:同名库功能类似,但mlscraper通过优化算法减少训练样本需求,提取速度更快。

商业爬虫平台:避免依赖第三方服务,支持本地化部署与自定义规则扩展。

适用场景

适用场景

数据字段结构简单但分布复杂的页面(如商品列表、作者信息页)。

需要快速验证数据提取逻辑的原型开发。

限制 对高度动态渲染的页面(如JavaScript生成内容)支持有限。

训练样本过少可能导致规则泛化能力不足(建议至少提供2-3个样本)。