检测并分类网页上的分页链接
项目描述
Autopager 是一个 Python 包,用于检测和分类分页链接。
许可协议是 MIT。
安装
使用 pip 安装 autopager
pip install autopager
Autopager 依赖于一些其他包,如 lxml 和 python-crfsuite;它将尝试自动安装它们,但如果安装失败,您可能需要查阅这些包的安装文档。
Autopager 在 Python 3.6+ 上运行。
使用方法
autopager.urls 函数返回分页 URL 列表
>>> import autopager >>> import requests >>> autopager.urls(requests.get('http://my-url.org')) ['http://my-url.org/page/1', 'http://my-url.org/page/3', 'http://my-url.org/page/4']
autopager.select 函数返回所有分页 <a> 元素作为 parsel.SelectorList(与 scrapy response.css / response.xpath 方法返回的对象相同)。
autopager.extract 函数返回一个包含(link_type, link)元组的列表,其中 link_type 是“PAGE”、“PREV”、“NEXT”之一,link 是一个 parsel.Selector 实例。
这些函数接受 HTML 页面内容(作为 Unicode 字符串)、requests Response 或 scrapy Response 作为第一个参数。
默认情况下,使用预构建的提取模型。如果您想使用自己的模型,请使用 autopager.AutoPager 类;它具有相同的方法,但允许提供模型路径或模型本身
>>> import autopager >>> pager = autopager.AutoPager('my_model.crf') >>> pager.urls(html)
如果您从git克隆了仓库,也必须使用AutoPager类;预构建模型仅在pypi发行版中可用。
检测质量
网页可以非常不同;autopager试图为所有网站工作,但一些错误是不可避免的。作为一个非常粗略的估计,预期它在从1M国际最流行的网站(根据Alexa Top)采样的网站上工作的正确率约为 9/10 的分页器。
贡献
工作原理
Autopager使用机器学习来检测分页器。它将HTML元素分类为4个类别
PREV - 前一页链接
PAGE - 指向特定页面的链接
NEXT - 下一页链接
OTHER - 不是分页链接
为此,它使用诸如链接文本、CSS类名、URL部分和左右上下文等特征。使用CRF模型进行学习。
网页表示为<a>元素的序列。只有具有非空href属性的<a>元素才包含在此序列中。
另请参阅:https://github.com/TeamHG-Memex/autopager/blob/master/notebooks/Training.ipynb
训练数据
数据存储在autopager/data中。原始HTML源代码在autopager/data/html文件夹中。注释存储在autopager/data/data.csv文件中;元素以CSS选择器形式存储。
训练数据用5个非空类别注释
PREV - 前一页链接
PAGE - 指向特定页面的链接
NEXT - 下一页链接
LAST - 不是单纯数字的“到最后一页”链接
FIRST - 不是“1”数字的“到第一页”链接
由于LAST和FIRST相对较少,它们被转换为PAGE,由分页模型转换。在注释期间使用这些类别,未来在更多训练示例的情况下,模型可以预测它们。
要将新页面添加到训练数据中,将其保存为html文件,并在data.csv文件中添加一行。使用http://selectorgadget.com/扩展名获取CSS选择器很有帮助。
如果您的CSS选择器没有直接返回<a>元素(在使用SelectorGadget时偶尔会选择<a>元素的父母或孩子),请不要担心。如果一个选择本身不是<a>元素,则尝试父<a>元素和子<a>元素,这通常是想得到的结果,因为<a>标签在有效的网站上不是嵌套的。
在使用SelectorGadget时,请特别注意不要选择除分页元素以外的任何内容。始终检查SelectorGadget显示的元素数量,并将其与您想要选择的元素数量进行比较。
一些网站在渲染后会更改它们的DOM。这很少影响分页器元素,但有时会发生这种情况。为了避免这种情况,而不是使用“另存为..”浏览器菜单选项下载HTML文件,最好使用开发者工具中的“复制外部HTML”或使用无头浏览器(例如Splash)渲染HTML。如果您这样做,请确保将UTF-8编码放入data.csv中,无论HTTP头或<meta>标签中定义的页面编码如何。
更改
0.3.1 (2020-09-09)
修复分发;
setup.py中不再需要backports.csv
0.3 (2020-09-09)
最低Python要求现在是3.6。较旧版本可能仍然可以工作,但它们不再在CI上进行测试。
内存使用有限,以避免在异常页面上的峰值。
0.2 (2016-04-26)
更多训练示例;
修复Scrapy < 1.1的支持;
修复了text-before和text-after特征中的bug。
0.1 (2016-03-15)
初始发布
autopager-0.3.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3de41ba5cc88828b48695f0e7176ebf6ab09d04139d1a4339af58d8b2728fdaa |
|
MD5 | 5bb5b4242e3ecf619e8c08f1683745c0 |
|
BLAKE2b-256 | 38407c7ccb492a103bd942f9ab4055de90468943f4b97f94b609a15184918ed8 |
autopager-0.3.1-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7f31c677d24dcf13e0f07b22831653d9988608a7821c22c8e8b49e876d527d51 |
|
MD5 | 34fb2b76b56714f8be95149966440e22 |
|
BLAKE2b-256 | 302bec83bbb5a88fddd81aaff110647160e7bd215bb92badcf4229fbbeb7b29a |