【转】基于行块分布函数的网页正文提取

python网页文字提取算法_python正文内容提取 平时打开一个网页,除了文章的正文内容,通常会有一大堆的导航,广告和其他方面的信息。本博客的目的,在于说明如何从一个网页中提取出文章的正文内容,而过渡掉其他无关的的信息。本方法是基于文本密度的方法,最初的想法来源于哈工大的《基于行块分布函数的通用网页正文抽取算法》,本文基于此进行一些小修改。约定:本文基于网页的不同行来进行统计,因此,假设网页内容是没有经过压缩的,就是网页有正常的换行的。有些新闻网页... 阅读详情
#! /usr/bin/env python3
# -*- coding: utf-8 -*-

import requests as req
import re

DBUG   = 0

reBODY =re.compile( r'<body.*?>([\s\S]*?)<\/body>', re.I)
reCOMM = r'<!--.*?-->'
reTRIM = r'<{0}.*?>([\s\S]*?)<\/{0}>'
reTAG  = r'<[\s\S]*?>|[ \t\r\f\v]'

reIMG  = re.compile(r'<img[\s\S]*?src=[\'|"]([\s\S]*?)[\'|"][\s\S]*?>')

class Extractor():
    def __init__(self, url = "", blockSize=3, timeout=5, image=False):
        self.url       = url
        self.blockSize = blockSize
        self.timeout   = timeout
        self.saveImage = image
        self.rawPage   = ""
        self.ctexts    = []
        self.cblocks   = []

    def getRawPage(self):
        try:
            resp = req.get(self.url, timeout=self.timeout)
        except Exception as e:
            raise e

        if DBUG: print(resp.encoding)

        resp.encoding = "UTF-8"

        return resp.status_code, resp.text

    def processTags(self):
        self.body = re.sub(reCOMM, "", self.body)
        self.body = re.sub(reTRIM.format("script"), "" ,re.sub(reTRIM.format("style"), "", self.body))
        # self.body = re.sub(r"[\n]+","\n", re.sub(reTAG, "", self.body))
        self.body = re.sub(reTAG, "", self.body)

    def processBlocks(self):
        self.ctexts   = self.body.split("\n")
        self.textLens = [len(text) for text in self.ctexts]

        self.cblocks  = [0]*(len(self.ctexts) - self.blockSize - 1)
        lines = len(self.ctexts)
        for i in range(self.blockSize):
            self.cblocks = list(map(lambda x,y: x+y, self.textLens[i : lines-1-self.blockSize+i], self.cblocks))

        maxTextLen = max(self.cblocks)

        if DBUG: print(maxTextLen)

        self.start = self.end = self.cblocks.index(maxTextLen)
        while self.start > 0 and self.cblocks[self.start] > min(self.textLens):
            self.start -= 1
        while self.end < lines - self.blockSize and self.cblocks[self.end] > min(self.textLens):
            self.end += 1

        return "".join(self.ctexts[self.start:self.end])

    def processImages(self):
        self.body = reIMG.sub(r'{{\1}}', self.body)

    def getContext(self):
        code, self.rawPage = self.getRawPage()
        self.body = re.findall(reBODY, self.rawPage)[0]

        if DBUG: print(code, self.rawPage)

        if self.saveImage:
            self.processImages()
        self.processTags()
        return self.processBlocks()
        # print(len(self.body.strip("\n")))

if __name__ == '__main__':
    ext = Extractor(url="http://blog.rainy.im/2015/09/02/web-content-and-main-image-extractor/",blockSize=5, image=False)
    print(ext.getContext())

基于行块分布函数的通用网页正文抽取

http://wenku.baidu.com/link?url=TOBoIHWT_k68h5z8k_Pmqr-wJMPfCy2q64yzS8hxsgTg4lMNH84YVfOCWUfvfORTlccMWe5Bd1BNVf9dqIgh75t4VQ728fY2Rte3x3CQhaS

网页正文及内容图片提取算法
http://www.jianshu.com/p/d43422081e4b

这一算法的主要原理基于两点:

正文区密度:在去除HTML中所有tag之后,正文区字符密度更高,较少出现多行空白;
行块长度:非正文区域的内容一般单独标签(行块)中较短。

测试源码:
https://github.com/rainyear/cix-extractor-py/blob/master/extractor.py#L9

总结

以上算法基本可以应对大部分(中文)网页正文的提取,针对有些网站正文图片多于文字的情况,可以采用保留<img> 标签中图片链接的方法,增加正文密度。目前少量测试发现的问题有:1)文章分页或动态加载的网页;2)评论长度过长喧宾夺主的网页。

web正文提取接口使用说明

http://www.weixinxi.wang/open/extract.html

Newspaper/python-readability库也可以实现


https://github.com/codelucas/newspaper

学到了很多python编码的技巧,拜倒在大佬的石榴裙下
 

基于行块分布函数的通用网页正文抽取算法 运用正则表达式能够精确的抽取某一固定格式的页面,但面对形形色色的HTML,运用规则处置难免捉襟见肘。能不能高效、精确的将一个页面的正文抽取出来,并做到在大范围网页范围内通用,这是一个直接关系上层应用的难题。 立即下载

相关推荐

基于行块分布函数的通用网页正文抽取

对于 Web 信息检索来说,网页正文抽取是后续处理的关键。虽然使用正则 表达式可以准确的抽取某一固定格式的页面,但面对形形色色的 HTML,使用规 则处理难免捉襟见肘。 能不能高效、准确的将一个页面的正文抽取出来,并做到在大规模网页范围 内通用,这是一个直接关系上层应用的难题。

网页正文抽取(一)——基于行块分布函数的算法

从原始HTML网页准确地抽取正文信息是构建海量、高质量语料的关键环节。

码农1479的博客 2283

cx-extractor:基于行块分布函数的通用网页正文抽取,C#版本

cx_extractor 基于行块分布函数的通用网页正文抽取 由于本人做网络爬虫的时候使用过这个方法的java版本,现在自己把java版本的改成了C#版本,希望对大家有用。基于行块分布函数的通用网页正文抽取:线性时间、不建DOM树、与HTML标签无关。原版本的作者为哈工大的陈鑫,代码放在google code上。

网页正文及内容提取算法

基于行块分布函数的通用网页正文抽取 http://wenku.baidu.com/link?url=TOBoIHWT_k68h5z8k_Pmqr-wJMPfCy2q64yzS8hxsgTg4lMNH84YVfOCWUfvfORTlccMWe5Bd1BNVf9dqIgh75t4VQ728fY2Rte3x3CQhaS 网页正文及内容图片提取算法 http://www.jianshu.co

TURING.DT 1万+

extractor:算法实现:基于行块分布函数的通用网页正文抽取算法

extractor 基于行块分布函数的通用网页正文抽取 算法的关键在于求行块分布函数 ##参考文献:

Modbus4J vs EasyModbus4J:哪个Java库更适合你的工业项目?

本文深入对比了Java领域两大Modbus通信库Modbus4J与EasyModbus4J。Modbus4J设计稳健、类型安全,适合复杂业务集成;EasyModbus4J基于Netty,在高并发场景下性能更优。文章从架构、性能、API及生产环境多维度分析,为工业物联网项目选型提供决策依据。

weixin_28475533的博客 312

网页正文抽取(三)——boilerpipe算法

Boilerpipe是一个非常优秀的网页正文抽取库,在抽取新闻和博客正文时,准确率非常高,基本开箱即用,著名的信息抽取工具Tika也使用了Boilerpipe作为网页内容自动提取的第三方库。

码农1479的博客 2448

从RADIUS服务器到AP:实战搭建一个小型WPA2-Enterprise测试环境(FreeRADIUS + 家用路由器)

本文详细介绍了如何从零搭建WPA2-Enterprise测试环境,使用FreeRADIUS服务器和家用路由器实现企业级WiFi认证。通过实战指南,包括证书生成、EAP-PEAP配置、OpenWrt路由器设置及故障排查,帮助网络工程师和爱好者掌握802.1X协议栈的实际应用。

weixin_28715953的博客 326

网页正文抽取(二)——jusText算法

jusText算法是一种优秀的网页正文提取算法,作者是Jan Pomikálek。该算法能够删除 HTML 页面中模板内容(如导航链接、页眉和页脚),自动保留正文句子,准确率很高,适合用于创建Web语料库。这篇文章描述了jusText算法的基本原理和实现步骤,并分析了算法在提取中文网页时的问题,给出了改进建议。

码农1479的博客 6169

ROS2+MoveIt2+Gazebo仿真实战:从零搭建六轴机械臂控制闭环

本文详细介绍了如何从零搭建一个完整的ROS2+MoveIt2+Gazebo六轴机械臂仿真控制闭环。通过手写URDF模型、配置MoveIt2运动规划、集成Gazebo物理仿真与ROS2 Control控制器,最终实现RViz中规划轨迹、Gazebo中同步执行的完整数字孪生验证平台,为机器人算法开发和硬件验证提供低成本、高效的仿真解决方案。

weixin_29093017的博客 487

Android架构中UseCase的设计原则与实战解析

本文深入解析Android架构中UseCase的设计原则与实战应用,探讨其在Domain Layer中的核心作用。通过对比ViewModel的臃肿问题,详细阐述UseCase的无状态原则、单一职责边界等设计铁律,并提供多种实现方式的代码示例,帮助开发者构建更清晰、高效的Android应用架构。

weixin_28432777的博客 431

python中的prettify

转自:http://blog.chedushi.com/archives/8333 创建一个新网站,一开始没有内容,通常需要抓取其他人的网页内容,一般的操作步骤如下: 根据url下载网页内容,针对每个网页的html结构特征,利用正则表达式,或者其他的方式,做文本解析,提取出想要的正文。 为每个网页写特征分析这个还是太耗费开发的时间,我的思路是这样的。 Python的Beautifu

zhengalen的博客 2万+

WPF+Prism+LiveCharts+materialdesignin 搭建WPF开发框架

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容。

T_Tboy的博客 3054

基于行块分布函数的网页正文抽取算法代码实现

最近在在做一个与资讯相关的APP,资讯是通过爬取获得,但是获取只有简单的信息,正文没有获取。所以在显示的时候很麻烦,一个标签链到到别人的网页,满屏的广告 ,还有各种弹窗,虽然页面确实做得很漂亮,但是不得不放弃这种简单的方式了,所以接下来自己动手了。     首先我们做的是基于HTML5的APP,所以基本上就是和网页打交道。但是接下来问题就来了,当用户点击某一条资讯时,该由谁来解析这个网页最后呈

求知 5108

告别JTAG!用Artix-7和SPI Flash实现FPGA远程升级的保姆级教程

本文详细介绍了如何利用Artix-7 FPGA和SPI Flash实现FPGA远程升级(OTA)的完整方案。通过硬件连接、Vivado工程配置和STM32模拟更新等步骤,帮助开发者告别传统的JTAG烧录方式,实现高效、安全的远程固件更新,特别适用于嵌入式系统开发中的现场维护场景。

weixin_33964987的博客 364

一套适合 ABAP 初级和中级开发人员,从入门到提高的 ABAP 学习教程

曾几何时,ABAP 就是 SAP 的代名词。ABAP 这门编程语言造就了 SAP 名噪一时的 R/3 产品,同时也是如今 SAP 旗舰级产品,SAP S/4HANA 底层的实现语言。 ABAP 不仅代表着 SAP 这家公司在企业级管理软件市场辉煌的过去,ABAP 自身也在不断地进化着。SAP 不仅在本地部署(On-Premise)领域继续保持着自己绝对的统治地位,而且在云应用领域(Software-as-a-Service, 简称 SaaS), 也推出了自己的解决方案,比如 SAP S/4HANA Clo

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5938

网页正文提取算法:行块分布算法 & Readability

爬取百度、搜狗、必应等搜索引擎时,详情页的正文因来源多样而无法简单通过通用的规则来匹配,这就需要相关的提取算法。本文在此介绍两种网页正文提取算法:行块分布算法 & Readability。

sinat_32501475的博客 1314

GeoXCP:可解释人工智能中空间解释的不确定性量化

GeoXCP: uncertainty quantification of spatial explanations in explainable AI提出基于保形预测(conformal prediction)的不确定性量化框架——地理空间解释保形预测(GeoXCP),将空间依赖纳入建模过程,生成具有校准不确定性估计的空间自适应解释。通过大量模拟实验和真实世界数据集验证,GeoXCP在不同地理空间场景中能提供可靠解释并有效量化不确定性,推动可解释地理空间机器学习的发展,帮助决策者评估模型驱动洞察的可信度。

May the Force be with you 243

基于行块分布函数的通用网页正文抽取算法初步认识

方法核心依据有两点:正文区的密度、行块的长度 将HTML去标签,留下正文 同时留下标签去除后的所有空白 位置信息。留下的正文称为Ctext 行块:以Ctext中的行号为轴取其周围k行,合起来称为一个 行块Cblock。 行块长度:一个Cblock去掉其中所有空白符后的字符总数 称为该行块的长度。 行块分布函数: 以Ctext每行为轴,共有LinesNum(Ctext

鲜于的专栏 2555

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

基于行块分布函数的通用网页正文(及图片)抽取

问题:如何提取任意(尤其是新闻、资讯类)网页的正文内容,提取与文章内容相关的图片,源码可见:extractor.py。 抓取单个网站网页内容时通常采用正则匹配的方式,但不同网站之间结构千奇百怪,很难用统一的正则表达式进行匹配。《基于行块分布函数的通用网页正文抽取算法》的作者总结了一般从网页中提取文章正文的方法,提出基于行块分布的正文抽取算法,并给出了 PHP 、Java 等实现。这一算法的主要原...

qfikh的博客 1758

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

[转]目前互联网上公布出来的正文提取算法

目前互联网上公布出来的正文提取算法,大家可以综合比较下,一起来测试下哪个更好用。 词网--北京词网科技有限公司http://demo.cikuu.com/cgi-bin/cgi-contex猎兔网页正文提取http://www.lietu.com/extract/PHP版网页正文提取http://www.woniu.us/get_co...

aodiyu3146的博客 378

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

正文提取

目前互联网上公布出来的正文提取算法,大家可以综合比较下,一起来测试下哪个更好用。 词网--北京词网科技有限公司 http://demo.cikuu.com/cgi-bin/cgi-contex 猎兔网页正文提取 http://www.lie 目前互联网上公布出来的正文提取算法,大家可以综合比较下,一起来测试下哪个更好用。 词网--北京词网科技有限公司http://demo.cikuu.com

VergiL Wang的专栏 8341

java正文提取_Java网页正文提取工具

最近做一个项目,其中涉及到网页信息采集,随后对相关的技术进行了学习与研发,网页正文提取技术常用的有joyhtml、boilerpipe、cx-extractor下面将对其做一个简单的对比说明,和大家进行下分享。相关技术1. joyhtml:http://code.google.com/p/joyhtml/JoyHTML的目的是解析HTML文本当中的链接和正文,利用超链接密度法为主要判断依据的标记窗...

weixin_33851300的博客 761

python extractor_GitHub - itfoxnet/cx-extractor-python: 基于行块分布函数的通用网页正文抽取算法的Python版本实现,添加了英文支持/ Web ...

Web Page Content Extraction Tool1. PurposeUsed to extract text from the web page, this tool is appropriate for the web page which contains lots of text. This tool support both English and Chinese web ...

weixin_29516131的博客 379

python抓取网页数据并截图_Python网页正文及内容图片提取算法

问题:如何提取任意(尤其是新闻、资讯类)网页的正文内容,提取与文章内容相关的图片,源码可见:extractor.py。抓取单个网站网页内容时通常采用正则匹配的方式,但不同网站之间结构千奇百怪,很难用统一的正则表达式进行匹配。《基于行块分布函数的通用网页正文抽取算法》的作者总结了一般从网页中提取文章正文的方法,提出基于行块分布的正文抽取算法,并给出了 PHP 、Java 等实现。这一算法的主要原理基...

weixin_39814093的博客 371

网页正文采集,正文提取项目

愚钝只看了php 感觉很不错。 查了下目前国内关于正文提取的项目,感觉这个很全面。 https://code.google.com/p/cx-extractor/ cx-extractor基于行块分布函数的通用网页正文抽取:线性时间、不建DOM树、与HTML标签无关 PHP 一个类库文件,一个DEMO文件。就2个。 class.textExtract.php ...

264
上一篇: 对HTML网页正文进行提取
下一篇: python对数据的一些处理方法
DedicateToAI
博客等级 码龄9年 6粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值