CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

请教大侠从网页的HTML语言中提取需要的信息该如何编程?

楼主sprite1211()2006-03-01 15:36:03 在 C/C++ / C语言 提问

我在做一个股票信息的提取工作,已经能够从网页上将HTML语言下载到本地,但是不知道要提取价格这一部分实时数据接下去该怎么办?  
   
  <tr   height="25"   bgcolor="#FFFFFF">  
  <td   align=middle   class=itm   nowrap>600028</td>  
  <td   align=middle   class=itm   nowrap><a   href=../q/bc.php?code=600028   class=link10>中国石化</a></td>  
  <td   align=right   class=itm   nowrap>5.24&nbsp;</td>  
  <td   align=right   class=itm   nowrap>5.23&nbsp;</td>  
  <td   align=middle   class=itm   nowrap>5.20&nbsp;-&nbsp;5.41</td>  
  <td   align=right   class=itm   nowrap><font   color=#ff0000><b>5.35</b></font>&nbsp;</td>  
  <td   align=right   class=itm   nowrap><font   color=#ff0000>+0.11</font>&nbsp;</td>  
  <td   align=right   class=itm   nowrap><font   color=#ff0000>+2.10%</font>&nbsp;</td>  
  <td   align=right   class=itm   nowrap>704,630&nbsp;</td>  
  <td   align=right   class=itm   nowrap>37,600&nbsp;</td>  
  <td   align=middle   class=itm   nowrap>  
  <a   href="../q/dc.php?code=600028&b=0"><font   color=blue>K</font></a>&nbsp;  
  <a   href="../q/cwzy.php?code=600028&b=0"><font   color=blue>F</font></a>&nbsp;  
  <a   href="../q/hp.php?code=600028&b=0"><font   color=blue>H</font></a>&nbsp;  
  <a   href="../q/ta.php?code=600028&b=0"><font   color=blue>T</font></a>&nbsp;  
  <a   href="../news/index.php?code=600028&b=0"><font   color=blue>N</font></a>&nbsp;  
  <a   href="../m/mb.php?code=600028"><font   color=blue>B</font></a></td></tr></td></tr> 问题点数:100、回复次数:18Top

1 楼sprite1211()回复于 2006-03-01 15:56:51 得分 0

救啊!Top

2 楼du51(郁郁思扬)回复于 2006-03-01 16:04:04 得分 0

你能不能把什么是价钱说一下?  
  比如+2.10%  
  这个是价钱吗?  
  再比如K这个东西不要读出来吧?  
  说的明白一点.Top

3 楼sprite1211()回复于 2006-03-01 16:09:22 得分 0

5.35是价格,+0.11是涨额,+2.10%是涨幅  
  最好还有code(代码)和股票名称  
  其他都不用了  
  谢!Top

4 楼happy__888([顾问团]寻开心 www.e-jjj.com)回复于 2006-03-01 16:20:45 得分 0

既然html文件已经下载了下来,就当作一个本地的文本文件  
  来查找特定的关键字吧  
  比如你的例子当中的“中国石化”这组字   或者前面的股票代码,  
  然后从该位置,开始按照html的格式来分析  
  html文件的格式主要是   <keyword     >       内容   </keyword>   这种模式  
  找到<>分析去  
   
  这个没有什么取巧的办法,而且日后网页设计的格式变化了,代码还要重新写  
   
   
  另外一个可能采用的办法是ie编程,提取网页当中的各个对象元素的类型,然后查询去  
  网上的从一个网页当中提取所有的链接地址的例子很多,可以仿照着做Top

5 楼sprite1211()回复于 2006-03-01 16:27:30 得分 0

问题是股票信息是一直都在变化的,当作一个文本的话是不是提取出来的数据就是固定不变的了?Top

6 楼cyberHunK(→迈克·老猫←)回复于 2006-03-01 16:39:04 得分 0

没什么办法,只有进行文件操作了!但是如果格式统一,对文件操作也是很方便的,怕的就是变!Top

7 楼happy__888([顾问团]寻开心 www.e-jjj.com)回复于 2006-03-01 16:41:43 得分 0

两步,第一步把页面抓下来,第二步分析这个页面  
   
  如果你想在线的实现,就要写一个插件了:  
  http://www.vckbase.com/document/viewdoc/?id=1093Top

8 楼sprite1211()回复于 2006-03-01 17:00:31 得分 0

页面我已经抓下来了,接下去怎么分析呢?Top

9 楼oo(为了名副其实,努力学习oo技术ing)回复于 2006-03-01 17:09:11 得分 0

用脚本语言   支持正则表达式的,   写一个正则表达式,匹配一下就行了Top

10 楼happy__888([顾问团]寻开心 www.e-jjj.com)回复于 2006-03-01 17:10:11 得分 0

分析是要按照下载下来的页面的格式来做啊  
  html本身就是一个模块话的结构,用<keyword></keyword>框成一段一段的了  
  而且股票这个东西的网页也一定是模板化的动态页面的  
  只要把这个模板结构搞定,就出来了Top

11 楼ugg(逸学堂(exuetang.net))回复于 2006-03-01 17:20:31 得分 0

 
  页面我已经抓下来了,接下去怎么分析呢?  
  `~`~`~`~`~`~`~`~`~`~`~`~  
  #include   <sstream>  
  using   namespace::std;  
   
  void   main()  
  {  
  ifstream   in("html.htm")  
  ostringstream   str;  
  str   <<   in.rdbuf();  
  string   str   =   str.str();//   做个转换目的就是防止<>标准在不同得行中.  
  int   iPos(0)  
  while((iPos   =   str.find('<',iPos)!=string::nops)  
  {  
  int   iTemp(iPos+1);  
  if((iTemp   =   str.find('>',iPos)!=string::nops)  
  {  
  str.delete(iPos,iTemp-iPos-1)  
  }  
  }  
  }  
   
  经过上面处理str中剩余得字符传都是有用得信息..Top

12 楼du51(郁郁思扬)回复于 2006-03-01 17:33:39 得分 0

#include<stdio.h>  
  #include<stdlib.h>  
  #include<string.h>  
  #include<ctype.h>  
  void   show(FILE   *fp)  
  {  
          char   file[10000],ch,*p=file,*q,*endptr;  
          int   i=0;  
          double   price;  
          /*写入数组*/    
          while((ch=fgetc(fp))!=EOF)*p++=ch;  
          *p=0;p=file;  
          /*求   code*/    
          if(p=strstr(p,"code="))  
          {  
                  p+=5;  
                  while(*p=='   ')p++;  
                  q=p;  
                  while(*q-'   ')*q++;  
                  *q=0;  
                  printf("代码是:%s\n",p);  
          }  
          /*求名*/    
          while(*q++-'>');p=q;  
          while(*p-'<')p++;*p=0;  
          printf("名字是:%s\n",q);  
          /*求价钱*/  
          q=p+1;  
          if(q=strstr(q,"<b>"))  
          {  
                  p=q+3;  
                  while(*p=='   ')p++;  
                  q=p;  
                  while(*p++-'   ');*p=0;  
                  price=strtod(q,&endptr);  
                  printf("价钱是:%.2f\n",price);  
          }  
  /*求涨额*/  
  q=p=p+15;  
  if(p=strstr(p,"</font>"))  
  {  
          *p=0;  
          q=p-1;  
          while(*q---'>');q+=2;  
          printf("涨额是:%s\n",q);  
  }  
  /*求涨幅*/  
  while(*p++-'%');*p=0;  
  q=p-1;  
  while(*q---'>');q+=2;  
  printf("涨幅是:%s\n",q);  
  }  
  int   main()  
  {  
          FILE   *fp=fopen("test.html","r");  
          show(fp);  
          fclose(fp);  
          system("PAUSE");  
          return   0;  
  }        
  /*结果如下  
  代码是:600028  
  名字是:中国石化  
  价钱是:5.35  
  涨额是:+0.11  
  涨幅是:+2.10%  
  请按任意键继续.   .   .  
  */Top

13 楼Holmescn(Holmes·Conan)回复于 2006-03-01 18:20:25 得分 0

用正则表达式啊,这么容易的问题。有很多库支持这个,你也可以用一些如perl的语言,支持正则的,这个很容易,正则表达式的用法,在网上有很多啊。Top

14 楼antter(JiangMiao)回复于 2006-03-01 18:23:11 得分 0

int   main(int   argc,char**   argv)  
  {  
  string   s;  
  fstream   in;  
  in.open("test.txt");  
  load_file(s,in);  
  s=regex_replace(s,regex("<(.*?)>|\\r"),"");  
  s=regex_replace(s,regex("&nbsp;"),"   ");  
  vector<string>   vec;  
  regex_split(::back_inserter<   vector<string>   >(vec),s,regex("\\n"));  
  cout<<"代码:"<<vec.at(0)<<endl;  
  cout<<"名字:"<<vec.at(1)<<endl;  
  cout<<"价钱:"<<vec.at(3)<<endl;  
  cout<<"涨额:"<<vec.at(6)<<endl;  
  cout<<"涨幅:"<<vec.at(7)<<endl;  
  return   0;  
  }  
   
  结果同du51(郁郁思扬)Top

15 楼sprite1211()回复于 2006-03-01 18:52:31 得分 0

谢谢各位高手Top

16 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-03-02 09:02:09 得分 0

http://blog.csdn.net/jiangsheng/archive/2003/08/15/3793.aspxTop

17 楼coder1(穿上防砖马甲和党员干部打成一片)回复于 2006-03-02 10:38:18 得分 0

用正则表达式啊  
  比如要想提取"中国石化"就可以这样写:  
  class=link10>(.*?)\s*</Top

18 楼wjd7623054(千古风流)回复于 2006-03-02 19:02:49 得分 0

正则可以,自己分析也不难啊Top

相关问题

  • 关于网页编程
  • 通过软件编程用什么方法把网页中的“名称”地址“姓名”电话“提取出来啊!
  • 提取网页的问题………………
  • 提取网页内容
  • Web也是编程,应该有个网页编程栏目。
  • 如何将Html数据串中的网页中可视的文字全部提取出来?
  • 如何将Html数据串中的网页中可视的文字全部提取出来?
  • 100分求一表达式从网页html代码中提取图片的scr地址!
  • 如何从网页中提取时间
  • 如何提取网页的参数?

关键词

  • 网页
  • 页面
  • 代码
  • 正则表达式
  • 语言
  • 涨幅
  • 分析
  • 文件
  • 下载
  • 信息

得分解答快速导航

  • 帖主:sprite1211

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo