免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7493 | 回复: 18
打印 上一主题 下一主题

[C] [分享]抽取HTML页面正文的代码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-13 12:29 |只看该作者 |倒序浏览
最近研究出来的, 简单实用, 但是CU的帖子不行, sina.com 和 china.com 的文章和帖子抽取都没问题, discuz的论坛帖子正文抽取也没问题.

代码比较多就不直接贴代码了, 可以直接从下面这个URL下载, 相互学习一下, 呵呵,
基本原理就是分块然后去除掉链接文字比例比较高的块的内容, 去除块文字少于某个阀值的块.

下载地址 http://libibase.googlecode.com/files/html-20090213161042.tar.gz

编译:
gcc -o html *.c  -D_DEBUG_HTML

需要显示删除的部分
gcc -o html *.c  -D_DEBUG_HTML -D_SHOW_DEL

只支持UTF-8编码的页面, 测试之前确认转成UTF-8
./html file.....

[ 本帖最后由 redor 于 2009-2-13 16:17 编辑 ]

评分

参与人数 1可用积分 +10 收起 理由
net_robber + 10 原创内容

查看全部评分

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:03
2 [报告]
发表于 2009-02-13 13:53 |只看该作者
可以打包一下吗? ^^

论坛徽章:
0
3 [报告]
发表于 2009-02-13 17:48 |只看该作者
原帖由 shihyu 于 2009-2-13 13:53 发表
可以打包一下吗? ^^



更新了....

论坛徽章:
0
4 [报告]
发表于 2009-02-13 18:59 |只看该作者
我看到的跟楼主说的相反, 如果是GB2312的页面,比如 http://finance.sina.com.cn/stock ... 3/15275853754.shtml 就能很好的提取,如果是utf-8编码的,比如 http://blog.sina.com.cn/s/blog_534535970100c75d.html?tj=1 输出就是乱码

论坛徽章:
0
5 [报告]
发表于 2009-02-13 22:25 |只看该作者
没看,也没想看,也不想看.

有简单的如sed,awk,perl不用.用C写,费劲费神,费身体,有大好时间多去上网多舒服.

论坛徽章:
0
6 [报告]
发表于 2009-02-14 00:30 |只看该作者
强!代码好干净,几乎没有注释。可以来个文档说说算法吗

论坛徽章:
0
7 [报告]
发表于 2009-02-14 07:42 |只看该作者
楼主,cu开源第一,代码实现能力超强,偶心中的NO。1,受小弟一拜

论坛徽章:
0
8 [报告]
发表于 2009-02-14 10:47 |只看该作者
原帖由 lipingtababa 于 2009-2-13 18:59 发表
我看到的跟楼主说的相反, 如果是GB2312的页面,比如 http://finance.sina.com.cn/stock ... 3/15275853754.shtml 就能很好的提取,如果是utf-8编码的,比如 http://blog.sina.com.cn/s/blog_ ...



抽取是根据页面内部的编码, 因为我遇到大字符的时候是按照UTF-8的格式移动位置的, 如果是GBK有可能会移动错误.

你的问题是因为显示问题, 你的terminal是GBK的, 所以认不出UTF-8的字符,你可以export LANG=zh_CN.UTF-8 或者 export LANG=zh_CN.GB18030

论坛徽章:
0
9 [报告]
发表于 2009-02-14 10:48 |只看该作者
原帖由 which 于 2009-2-13 22:25 发表
没看,也没想看,也不想看.

有简单的如sed,awk,perl不用.用C写,费劲费神,费身体,有大好时间多去上网多舒服.



我要嵌入到代码里用的, SED, AWK PERL是没法用的.....

论坛徽章:
0
10 [报告]
发表于 2009-02-14 10:53 |只看该作者
原帖由 greatho1507 于 2009-2-14 00:30 发表
强!代码好干净,几乎没有注释。可以来个文档说说算法吗



基本就是按照标签分开, 标签列表在htmltags.h 里, 这个是通过整理的,
有说明哪些标签是成对的, 哪些标签对内部内容需要删除, 比如<script></script>内部的东西就是要删除的.
还有说明哪些标签是成块的, 比如<TD></TD> <DIV></DIV> <P></P>等.
抽取正文按照标记为块的标签分块, 每个块内部的link文字需要做统计, 这个块结束的时候, 计算链接文字占整个块文字的比例,
如果高于50%就有可能是广告或者导航链接 就删除掉, 还有就是块内文字少于64字节的也删除掉.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP