专栏首页未闻Code为什么GNE 不做全自动提取列表页的功能

为什么GNE 不做全自动提取列表页的功能

GNE 上线以后,很多同学在用户群里面问到,GNE 能否支持列表页自动提取?例如对于下图中的新闻标题列表:

能自动提取到如下图所示的数据:

[{'title': '上周汪文斌回应80多个提问 其中3件事尤其引人关注',
  'url': 'https://news.163.com/20/0726/20/FIG6FJEG00019B3E.html'},
 {'title': '成都美领馆关闭前24小时:现场有人高唱《大中国》',
  'url': 'https://news.163.com/20/0726/19/FIG1NF9I00019B3E.html'},
 {'title': '美驻成都总领馆现黑垃圾袋 外媒记者:似乎有碎纸片',
  'url': 'https://news.163.com/20/0726/18/FIG0E0IQ0001899O.html'},
 {'title': '美驻成都总领馆被通知关闭第3天:凌晨3点有车驶离',
  'url': 'https://news.163.com/20/0726/16/FIFOFU580001899O.html'},
 {'title': '新三板精选层下周一见',
  'url': 'https://money.163.com/20/0726/07/FIEPSRPS00259DLP.html'},
 {'title': '中巴驶入美驻成都领馆 安保开门时严加防范站成一排',
  'url': 'https://news.163.com/20/0726/13/FIFDBAIV0001899O.html'},
 {'title': '知情人:杀妻案嫌犯曾威胁前妻不同意离婚"命都没有"',
  'url': 'https://news.163.com/20/0726/12/FIFC5VFG00019QIF.html'}]

想法非常好,但实现起来会面临一些问题。

不止一处列表

在一个页面,存在不止一处列表,如下图红色方框、蓝色方框和绿色方框,这三处,从 HTML 里面看,都是列表:

那么,程序怎么知道,应该提取哪个列表?如果把所有列表全部返回,那么用户怎么区分哪些是不需要的呢?如果传入一个 XPath 限定从特定的范围抓取列表,但是既然都传入 XPath 了,直接用这个 XPath 提取列表不就好了吗?

列表项里面哪个 URL 才是标题的 URL?

接下来,你能成功找到列表页所在的区域,那么如果每一行有多个链接,你如何知道哪一个<a>标签中的文字是标题、哪一个@href对应的网址是正文的网址?请看下图,如果不看文字内容,请问你能从 HTML 里面区分哪个红框中的网址对应的是正文网址吗?

所以GNE会怎么做?

GNE 从一开始就不相信各种各样的列表页能自动化完美提取,所以也不会去做完美自动化提取列表页的功能。GNE 要做的是,有限的自动化。

什么叫做有限自动化呢?如下图所示:

在调用list_extractor.extract方法的时候,除了传入网页的 HtmlElement 外,还传入了一个feature参数。这个参数的值是一个看起来像是直接从 Chrome 中复制的 XPath。

没错,feature 参数是你需要的目标列表里面任意一个标题的 XPath。你可以直接在 Chrome 中用开发者工具复制出来。

GNE 拿到 feature 参数以后,会自动从下往上检查它的祖先节点,寻找 feature 参数对应的标题所在的列表。

这样做的好处是显而易见的——第一,这个 XPath 本身已经限定了我需要的列表页所在的位置,所以即使当前页面有多个列表页也能正确识别;第二,feature 参数也能表示出我们需要提取的标题所在的具体标签。所以即使一个列表每一行有多个 <a>标签,也能提取到正确的标题和 URL。

除了 XPath 外,feature 参数也可以接收关键词,如下图所示:

GNE 会到HTML 去寻找所有包含这个关键词的节点,并通过判断他们的祖先节点来寻找这个关键词所在的标题所在的列表。

什么叫做有限的自动化

有限的自动化就是永远相信人的力量。基于统计学的所有 AI 算法都是不可靠的。

上线时间

有限自动化提取列表页的功能,将会在8月2号上线。

本文分享自微信公众号 - 未闻Code(itskingname),作者:kingname

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python 源代码里的算法——如何合并多个有序列表并使得结果依然有序?

    去年的一篇文章《一日一技:在 Python 里面如何合并多个有序列表并使得结果依然有序?》,我很自不量力地提到了“多个有序列表”。但实际上,那篇文章仅仅是合并两...

    青南
  • Gne Online:通用新闻网页正文在线提取

    一直以来,GNE 是以 Python 包的形式存在,要测试 GNE 的提取效果,需要使用 pip 先安装,再写代码使用。

    青南
  • 一日一技:pandas读取多个工作簿

    在使用pandas读Excel文件的时候,可能会遇到有多个工作簿的情况。如果我们直接像下面这样写代码:

    青南
  • Python 源代码里的算法——如何合并多个有序列表并使得结果依然有序?

    去年的一篇文章《一日一技:在 Python 里面如何合并多个有序列表并使得结果依然有序?》,我很自不量力地提到了“多个有序列表”。但实际上,那篇文章仅仅是合并两...

    青南
  • Python学习笔记五(列表和元组)

    最近这段时间是一年中最忙的时候,学习进度严重耽误,距离上一次更新Python的学习进度又已经一个月过去了,“佩服”我自己。趁着假期,继续学习我的Python,顺...

    世纪访客
  • redis命令之操作列表

    Reids是可以操作列表的,列表是一种数据结构,在redis中,它允许用户从列表的两端推入或者弹出数据、获取列表数据以及执行各种常见的列表操作。初次之外,列表还...

    无邪Z
  • Python知识点笔记-列表list、元组tuple和dict类型

    小蓝枣
  • python笔记21-列表生成式

    python里面[]表示一个列表,快速生成一个列表可以用range()函数来生成。 对列表里面的数据进行运算和操作,生成新的列表最高效快速的办法,那就是列表生成...

    上海-悠悠
  • Python学习笔记整理(五)Pytho

    列表和字段,这两种类型几乎是Python所有脚本的主要工作组件。他们都可以在原处进行修改,可以按需求增加或缩短,而且包含任何种类的对象或者被嵌套。 一、列...

    py3study
  • python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍

    使用ipython进入shell, 可以建立列表变量,使用的时候, 列表变量.按下TAB键,则会出现对应方法. 如下:

    IBinary

扫码关注云+社区

领取腾讯云代金券