高质量该文,第三天数送抵!

自动草稿

文 | 安肃

原文 | 提前布局

GNE(GeneralNewsExtractor)是两个通用型新闻报道英文网站节录抽出组件,输入一则新闻报道页面的 HTML, 输入节录文本、副标题、译者、正式发布天数、节录中的相片门牌号和节录所处的条码源标识符。GNE 在抽取本周一头条新闻、腾讯新闻报道、拾荒者天空、 观测者网、网易网、百度新闻报道、ReadHub、网易新闻报道等数十个英文新闻报道英文网站上效用十分出众,基本上能达至 100%的准确度。

采用形式比较简单:

fromgneimportGeneralNewsExtractorextractor = GeneralNewsExtractorhtml =英文网站源标识符result = extractor.extract(html)print(result)

GNE 的输入是历经 js 图形之后的HTML 标识符,因此 GNE 能相互配合 Selenium 或是 Pyppeteer 采用。

右图是 GNE 相互配合 Selenium 同时实现的两个 Demo:

自动草稿

相关联的标识符为:

importtimefrom gneimportGeneralNewsExtractorfrom selenium.webdriverimportChromedriver = Chrome(./chromedriver)driver.get(https://www.toutiao.com/a6766986211736158727/)time.sleep(3)extractor = GeneralNewsExtractorresult = extractor.extract(driver.page_source)print(result)

右图是 GNE 相互配合 Pyppeteer 同时实现的 Demo:

自动草稿

相关联标识符如下表所示:

importasynciofrom gneimportGeneralNewsExtractorfrom pyppeteerimportlaunchasyncdefmain:browser =awaitlaunch(executablePath=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome)page =awaitbrowser.newPageawait page.goto(https://news.163.com/20/0101/17/F1QS286R000187R2.html)extractor = GeneralNewsExtractorresult = extractor.extract(awaitpage.content)print(result)input(检查完成之后回到这里按下任意键)asyncio.run(main)

如何安装 GNE

现在你能直接采用 pip 安装 GNE 了:

pipinstall gne

如果访问 pypi 官方源太慢,你也能采用腾讯源:

pip install gne -ihttps://mirrors.163.com/pypi/simple/

安装过程如右图所示:

自动草稿

功能特性

获取节录源标识符

在extract方法只传入页面源标识符,不添加任何额外参数时,GNE 返回如下表所示字段:

title:新闻报道副标题

publish_time:新闻报道正式发布天数

author:新闻报道译者

content:新闻报道节录

images: 节录中的相片(相对路径或是绝对路径)

可能有些朋友希望获取新闻报道节录所处条码的源标识符,此时能给extract方法传入with_body_html参数,设置为 True:

extractor= GeneralNewsExtractorextractor.extract(html, with_body_html=True)

返回数据中将会增加两个字段body_html,它的值就是节录相关联的 HTML 源标识符。

运行效用如右图所示:

自动草稿

总是返回相片的绝对路径

默认情况下,如果新闻报道中的相片采用的是相对路径,那么 GNE 返回的images字段相关联的值也是相片相对路径的列表。

如果你想始终让 GNE 返回绝对路径,那么你能给extract方法增加host参数,这个参数的值是相片的域名,例如:

extractor= GeneralNewsExtractorextractor.extract(html, host=https://www.kingname.info)

这样,如果新闻报道中的相片是/images/pic.png,那么 GNE 返回时会自动把它变为https://www.kingname.info/images/pic.png

指定新闻报道副标题所处的 XPath

GNE 预定义了一组 XPath 和正则表达式用于抽取新闻报道的副标题。但某些特殊的新闻报道英文网站可能无法抽取副标题,此时,你能给extract方法指定title_xpath参数,用于抽取新闻报道副标题:

extractor= GeneralNewsExtractorextractor.extract(html, title_xpath=//title/text)

提前移除噪声条码

某些新闻报道下面可能会存在长篇大论的评论,这些评论看起来比新闻报道节录更像节录,为了防止他们干扰新闻报道的抽取,能通过给extract方法传入noise_node_list参数,提前把这些噪声节点移除。noise_node_list的值是两个列表,里面是两个或多个 XPath:

extractor= GeneralNewsExtractorextractor.extract(html, noise_node_list=[//div[@class=”comment-list”],//*[@style=”display:none”]])

采用配置文件

API 中的参数title_xpath、host、noise_node_list、with_body_html除了直接写到extract方法中外,还能通过两个配置文件来设置。

请在项目的根目录创建两个文件.gne,配置文件能用 YAML 格式,也能采用 JSON 格式。

YAML 格式配置文件

title:xpath: //title/texthost: https://www.xxx.comnoise_node_list:- //div[@class=”commentlist“]– //*[@style=”display:none“]with_body_html: true

JSON 格式配置文件

{“title”: {“xpath”:“//title/text”},“host”:“https://www.xxx.com”,“noise_node_list”: [“//div[@class=”comment-list“]”,“//*[@style=”display:none“]”],“with_body_html”:true}

这两种写法是完全等价的。

配置文件与extract方法的参数一样,并不是所有字段都需要提供。你能组合填写你需要的字段。

如果两个参数,既在extract方法中,又在.gne配置文件中,但值不一样,那么extract方法中的这个参数的优先级更高。

FAQ

GeneralNewsExtractor(以下简称 GNE)是食腐吗?

GNE 不是食腐,它的项目名称 General News Extractor 表示通用型新闻报道抽出器。它的输入是 HTML,输入是两个包含新闻报道副标题,新闻报道节录,译者,正式发布天数的字典。你需要自行设法获取目标页面的 HTML。

GNE 现在不会,将来也不会提供请求页面的功能。

GNE 支持翻页吗?

GNE 不支持翻页。因为 GNE 不会提供页面请求的功能,因此你需要自行获取每一页的 HTML,并分别传递给 GNE。

GNE 支持哪些版本的 Python?

不小于 Python 3.6.0

我用 requests/Scrapy 获取的 HTML 传入 GNE,为什么不能抽取节录?

GNE 是基于 HTML 来抽取节录的,因此传入的 HTML 一定要是历经 JavaScript 图形之后的 HTML。而 requests 和 Scrapy 获取的只是 JavaScript 图形之前的源标识符,因此无法正确抽取。

另外,有一些页面,例如本周一头条新闻,它的新闻报道节录实际上是以 JSON 格式直接写在页面源标识符的,当页面在浏览器上面打开的时候,JavaScript 把源标识符里面的节录解析为 HTML。这种情况下,你在 Chrome 上面就看不到 Ajax 请求。

因此建议你采用Puppeteer/Pyppeteer/Selenium 之类的工具获取历经图形的 HTML 再传入 GNE。

1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!