检测和分类网页上的分页链接
autopager的Python项目详细描述
autoager是一个python包,用于检测分页链接并对其进行分类。
许可证是麻省理工学院的。
安装
使用pip安装autoager:
pip install autopager
autopage依赖于其他几个包,如lxml和python-crfsuite; 它将尝试自动安装,但您可能需要咨询 如果安装失败,则使用这些包的安装文档。
autoager在python 2.7+和3.3+中工作。
用法
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是“page”、“prev”、“next”和link之一 是一个parsel.Selector实例。
这些函数接受HTML页面内容(作为Unicode字符串)。 请求响应或零星响应作为第一个参数。
默认情况下,使用预先构建的提取模型。如果你想用 您自己的模型使用autopager.AutoPagerclass;它具有相同的 方法,但允许提供模型路径或模型本身:
>>> import autopager >>> pager = autopager.AutoPager('my_model.crf') >>> pager.urls(html)
如果您已经从git克隆了存储库,那么还必须使用autoparger类; 预构建模型仅在pypi版本中可用。
检测质量
网页可能会有很大的不同;自动管理器试图为所有网站工作, 但有些错误是不可避免的。作为一个非常粗略的估计,希望它能起作用 适用于从1M国际公司取样的网站上的9/10分页器 最受欢迎的网站(根据Alexa Top)。
贡献
工作原理
自动管理器使用机器学习来检测分页器。它将 <a>html元素分成4个类:
- 上一页-上一页链接
- 页面-指向特定页面的链接
- 下一页-下一页链接
- 其他-不是分页链接
为此,它使用链接文本、css类名等功能, url部分和右/左上下文。CRF模型用于学习。
网页表示为一个<a>元素序列。只有<a> 具有非空Href属性的元素在此序列中。
另请参见:https://github.com/TeamHG-Memex/autopager/blob/master/notebooks/Training.ipynb
培训数据
数据存储在autoager/data。原始HTML源代码 在autoager/data/html文件夹中。注释位于autoager/data/data.csv中 文件;元素存储为css选择器。
培训数据用5个非空类注释:
- 上一页-上一页链接
- 页面-指向特定页面的链接
- 下一页-下一页链接
- last-“got to last page”链接,它不仅仅是一个数字
- First-“got to first page”链接不仅仅是“1”号
因为last和first比较少见,所以它们被转换为page 通过分页模型。通过在注释期间使用这些类,可以 通过更多的训练,可以使模型在将来也能预测它们 例子。
将新页面添加到培训数据的步骤将其保存到HTML文件中 并在data.csv文件中添加一行。这很有帮助 使用http://selectorgadget.com/扩展来获取css选择器。
如果css选择器不直接返回<a>元素,请不要担心。 (偶尔选择<a>元素的父元素或子元素很容易 使用selectorgadget时)。如果选择本身不是<a>元素 然后尝试父元素<a>和子元素<a>,这是 通常需要什么,因为<a>标记没有嵌套在有效的网站上。
使用选择器时,请特别注意不要选择任何其他选项 而不是分页元素。始终检查显示的元素计数 selectorgadget并将其与要选择的许多元素进行比较。
一些网络站点在呈现后更改其dom。这很少影响分页者。 但有时也会发生。防止它而不是下载 HTML文件使用“另存为..”浏览器菜单选项最好使用 开发工具中的“复制外部html”或使用无头浏览器呈现html (例如Splash)。如果这样做,请确保将utf-8编码设置为data.csv, 不考虑在http头或<meta>标记中定义的页编码。
更改
0.2(2016-04-26)
- 更多培训示例;
- 固定刮板<;1.1支持;
- 修正了前文本和后文本功能中的错误。
0.1(2016-03-15)
初始版本