免费注册 查看新帖 |

Chinaunix

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

[C] 如果在C程序想抓取网页内容 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-18 13:43 |只看该作者 |倒序浏览
如果在C程序想抓取网页内容,比如百度
方法1. 执行System("wget http://www.baidu.com -q -O baidu.html"),然后再分析baidu.html。
方法2. 直接写socket程序获取http://www.baidu.com的内容存入buffer中。

那种方法好呢?

  如果方法2好,有没有现成的代码给小弟参考一下。因为方法1 ,我担心因为system是在子进程中执行wget,可能wget还没有下载完网页,后面的程序已经开始分析baidu.html了,可能会造成意外。另外有没有其他的方法?

论坛徽章:
0
2 [报告]
发表于 2008-08-18 13:49 |只看该作者
c语言提取已知固定模版网页内容一般流程为:
1、分析特殊标记,这些特殊标记将成为你提取有价值信息的指针定位器
2、使用一组指针,搜索数据段(strstr,strchr stristr)
3、处理数据段数据,清除和处理格式数据(HTML 标记,比如 <BR> 转换为\r\n,多余的空格、制表符、回车换行符要去掉,实体字符要还原...)
4、判断信息量,存储或者返回

如果只是处理html标记的大块数据,应该是很容易的
标题: <title> 对
内容: <body> 对
处理html标记
1、替换 <br>
2、清除标记
3、转换实体字符

论坛徽章:
0
3 [报告]
发表于 2008-08-18 13:50 |只看该作者
system函数本身是会阻塞的

论坛徽章:
0
4 [报告]
发表于 2008-08-18 13:50 |只看该作者
大姐,我不是问如何分析网页,而是怎么样现把网业搞到buffer中

论坛徽章:
0
5 [报告]
发表于 2008-08-18 13:52 |只看该作者
原帖由 5毛党党员 于 2008-8-18 13:50 发表
system函数本身是会阻塞的

有道理,这种方式会有什么弊端?会不会影响程序的性能?

论坛徽章:
0
6 [报告]
发表于 2008-08-18 13:55 |只看该作者
原帖由 thinmonkey 于 2008-8-18 13:50 发表
大姐,我不是问如何分析网页,而是怎么样现把网业搞到buffer中

c语言提取已知固定模版网页内容,不是分析

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
7 [报告]
发表于 2008-08-18 13:58 |只看该作者

回复 #1 thinmonkey 的帖子

可以使用curl库抓取网页,curl功能很强大!

论坛徽章:
0
8 [报告]
发表于 2008-08-18 14:01 |只看该作者
效率问题,如果是要处理很多网页,可以把多线程,把下载和分析分开。

设置一个队列,下载线程每次下载完,就把文件名加到队列里。

分析线程轮询,发现队列里有数据,就处理,然后从队列里删除

论坛徽章:
0
9 [报告]
发表于 2008-08-18 14:06 |只看该作者
网页不超过10个,应该用不上多线程的牛刀,wget和curl哪个效率更高?

论坛徽章:
0
10 [报告]
发表于 2008-08-18 14:11 |只看该作者
就10个的话,无所谓效率吧。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP