检测和分类网页上的分页链接

autopager的Python项目详细描述


PyPI VersionBuild StatusCode Coverage

autoager是一个python包,用于检测分页链接并对其进行分类。

许可证是麻省理工学院的。

安装

使用pip安装autoager:

pip install autopager

autopage依赖于其他几个包,如lxmlpython-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)

初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java从Struts操作的钩子更改表单值(Liferay 6.2)   java如何改变Spring MVC处理url“点”字符的行为   Clojure中使用Java接口的问题   junit如何模拟comosDB azure java集成客户端?   运行函数时发生java错误   netbeans Java。jar文件和依赖项   Eclipse中文本字段中的java输入类型   在JAVA中,将集合变量从实时批处理运行时传递到调用批处理文件   java通过Bean验证API中的自定义消息管理异常   XML到json的转换,在Java中,同时保留数据类型   根据JAVA中的列名从Excel文件中获取单元格值   在AsyncTask的doInBackground中未调用java FirebaseMessagingService   java如何在数据库中插入一行?