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

√*︻$▅▆▇◤ 33分捉拿高手!关于C#获取网页HTML代码!

楼主johnzen(以速度突破生命)2006-11-01 23:11:59 在 .NET技术 / C# 提问

在C#应用程序中,要获取HTML源代码是非常容易的事。但是,近日我发现soso的搜吧居然获取不到HTML代码。请问如何解决?  
  比如说这句网址的HTML代码:  
  http://post.soso.com/cgi-bin/cgimain?proto=8&tid=407966&pgn=1  
   
  谢谢!近日我在一个采集程序时,想采集搜吧呢。请大家贴代码前测试一下,这样可以节省你我的时间。 问题点数:33、回复次数:19Top

1 楼free_wang()回复于 2006-11-01 23:34:15 得分 0

upTop

2 楼Love_My()回复于 2006-11-01 23:48:25 得分 0

奇怪了..  
  真的不行    
  远程服务器返回错误:   (403)   已禁止。Top

3 楼macker0030(今晚仰卧明早起坐,明天俯卧后天撑)回复于 2006-11-02 00:32:50 得分 28

懒得写代码,随便扯下。  
  403会不会是服务器对User-Agent进行了验证?弄个AddHeader()添加上Internet   Explorer试试Top

4 楼dyw31415926(守护)回复于 2006-11-02 09:01:45 得分 0

既然有这么多朋友问这问题,我就写了一个小程序,希望大家能理解,拖个button1   listBox1  
  在button事件里写代码,参考代码如下:(不要忘了加引用哦)  
  using   System.Net;  
  using   System.IO;    
  private   void   button1_Click(object   sender,   EventArgs   e)  
                  {  
                         
                          WebRequest   request   =   WebRequest.Create(  
                              "http://post.soso.com/cgi-bin/cgimain?proto=8&tid=407966&pgn=1");    
                          request.Credentials   =   CredentialCache.DefaultCredentials;  
                          WebResponse   response   =   request.GetResponse();  
                          Stream   dataStream   =   response.GetResponseStream();  
                          StreamReader   reader   =   new   StreamReader(dataStream);  
                          string   responseFromServer   =   "";  
                          string   strTemp;  
                          while   (   (strTemp   =   reader   .ReadLine   ())   !=   null   )  
                          {  
                                    listBox1.Items.Add(strTemp   );  
                          }  
                          reader.Close();  
                          response.Close();  
   
                  }  
  -------------------------------------------  
  在vs2005   winform下测试通过,并顺利取得html代码,只要将网址改成你想要的,基本都能获得html(对用不常用编码写的html代码,要考虑转换了再显示出来),在此例中是将它show到listbox  
  中,既然能获得流了,你要怎么处理都是不难的事了,呵呵Top

5 楼woshibai112(科比)回复于 2006-11-02 09:21:40 得分 0

NBTop

6 楼feiyun0112(http://feiyun0112.cnblogs.com/)回复于 2006-11-02 09:29:42 得分 1

你可以看看我的CSDN   Reader的源代码  
   
  可能对你有帮助  
       
  *****************************************************************************  
  欢迎使用CSDN论坛阅读器   :   CSDN   Reader(附全部源代码)    
  http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.htmlTop

7 楼yiming0755()回复于 2006-11-02 09:58:23 得分 0

把模板页面写成一个用户控件,然后render就可以了.Top

8 楼johnzen(以速度突破生命)回复于 2006-11-02 20:28:57 得分 0

dyw31415926(dyw31415926)   ,这位兄弟你好。你难道没测试过你的代码吗?  
  你的代码在读SOSO时,总是返回403错误。Top

9 楼fanglu(无方路 fineroute@163.com)回复于 2006-11-02 21:36:55 得分 0

down   個   VS2005   試試。Top

10 楼syczx(笑笑)回复于 2006-11-03 11:39:31 得分 1

我用php很容易就抓下来了啊,没用什么特别的操作呢。  
  <?php  
  $file   =   fopen   ("http://post.soso.com/cgi-bin/cgimain?proto=8&tid=407966&pgn=1",   "r");  
  if   (!$file)   {  
        echo   "<p>Unable   to   open   remote   file.\n";  
        exit;  
  }  
  while   (!feof   ($file))   {  
        $line   =   fgets   ($file,   1024);  
  print($line);  
  }  
  fclose($file);  
  ?>    
  Top

11 楼lovevsnet(编程一把手)回复于 2006-11-03 13:14:08 得分 1

用InternetExplorerClass方法:  
  ---------------------------------------------------------------------------------  
  InternetExplorerClass   m_IE=new   InternetExplorerClass();  
  m_IE.Silent=true;  
  stbr.Text="正在打开IE...";  
  object   o=null;  
  string   url="http://post.soso.com/cgi-bin/cgimain?proto=8&tid=407966&pgn=1";  
  m_IE.Navigate(url,ref   o,ref   o,ref   o,ref   o);  
  stbr.Text="正在打开网页...";  
  while(m_IE.ReadyState!=SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE)  
  {  
  Thread.Sleep(500);  
  Application.DoEvents();  
  }  
  HTMLDocument   doc=(HTMLDocument)m_IE.Document;  
  //MessageBox.Show(doc.body.outerHTML);//doc.createDocumentFromUrl  
  rch1.AppendText(doc.body.outerHTML);  
  m_IE.Quit();  
  Top

12 楼johnzen(以速度突破生命)回复于 2006-11-03 23:09:38 得分 0

楼上的兄弟,你这个方法到时必须另外调用一个dll文件的。  
  不符合我的项目要求。Top

13 楼cugliang(雨帘)回复于 2006-11-03 23:48:20 得分 1

可以去找网络蜘蛛,我曾经写过一个,关键在于解析html代码,通过webrequest和webresponse来写Top

14 楼chaney(chaney)回复于 2006-11-03 23:56:08 得分 0

是否可以用webbrowser,设置路径,然后得到它的htmlText呢?Top

15 楼lovevsnet(编程一把手)回复于 2006-11-04 07:28:36 得分 0

楼主,我的代码不需要别的DLL;  
  你只须将axWebBrowser放在窗体中,然后删除该控件  
  然后右击"引用",添加Microsoft.mshtml  
  在文件中添加:  
  using   SHDocVw;  
  using   mshtml;  
  我上述代码就可以运行了,不需要WebBrowser控件Top

16 楼lovevsnet(编程一把手)回复于 2006-11-04 07:42:08 得分 1

还有一办法只需要添加对mshtml的引用,using   mshtml,可以得到指定URL的HTMLDocument   doc对象(用HTMLDocument的createDocumentFromUrl)  
  那样同样可以得到该文档所有节点,得到的doc.documentElement.outerHTML好象和HTML的源文件差不多Top

17 楼liuzkun2(飘零逝水)回复于 2006-11-04 11:08:56 得分 0

最简单通知的方法,   用JS:  
  <input   type=button   value=查看网页源代码   onclick="window.location   =   'view-source:'+   'http://post.soso.com/cgi-bin/cgimain?proto=8&tid=407966&pgn=1'">Top

18 楼johnzen(以速度突破生命)回复于 2006-11-04 21:19:56 得分 0

解决了!  
   
                                  WebClient   client   =   new   WebClient();  
                                  client.Headers.Set("User-Agent",   "Microsoft   Internet   Explorer");//此句是关键  
                                  Byte[]   pageData   =   client.DownloadData(textBox2   .Text);  
                                  textBox1.Text   =   Encoding.GetEncoding("gb2312").GetString(pageData);Top

19 楼lovevsnet(编程一把手)回复于 2006-11-07 13:21:23 得分 0

现在CSDN上倒分贴太多,以后真不想化时间在回贴上了,最近给别人回了好多贴,其中有一贴好象被删除了,明显倒分的,唉,不知道说什么好Top

相关问题

关键词

得分解答快速导航

  • 帖主:johnzen
  • macker0030
  • feiyun0112
  • syczx
  • lovevsnet
  • cugliang
  • lovevsnet

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

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