CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

请教一个抓取页面的问题

楼主sjt(掌握星光)2005-04-03 22:51:16 在 Web 开发 / ASP 提问

我使用asphttp或者XMLHTTP抓取页面的时候,如果对方页面没有指定默认语言,那抓回来的页面中文就都是乱码  
  比如这个页面:http://www.booksky.biz/Chapter.aspx?BookID=33&SortID=400&ChapterID=18968  
  请问有办法解决吗?  
  谢谢 问题点数:50、回复次数:6Top

1 楼baisun(蟋蟀.NET)回复于 2005-04-03 23:20:26 得分 0

利用XMLHTTP无刷新获取数据.    
  利用XMLHTTP无刷新获取数据.    
   
  客户端和服务器端数据的交互有几种方法.  
  1.提交,通过<form></form>提交到服务器端.也称"有刷新"吧.  
  2.通过XMLHTTP无刷新提交到服务器端,并返回数据.也称"无刷新"吧.  
  利用XMLHTTP我们可以实现很多很强大的应用.这文章主要介绍它的一  
  些简单的应用.  
   
  附:因为XMLHTTP是IE5.0+支持的对象.所以你必须要有IE5.0+才能看到效果.  
   
  client.htm  
   
  <script   language="JavaScript">  
  function   GetResult(str)  
  {  
  /*  
    *---------------   GetResult(str)   -----------------  
    *   GetResult(str)    
    *   功能:通过XMLHTTP发送请求,返回结果.  
    *   参数:str,字符串,发送条件.  
    *   实例:GetResult(document.all.userid.value);  
    *   author:wanghr100(灰豆宝宝.net)  
    *   update:2004-5-27   19:02  
    *---------------   GetResult(str)   -----------------  
    */  
          var   oBao   =   new   ActiveXObject("Microsoft.XMLHTTP");  
          oBao.open("POST","server.asp?userid="+str,false);  
          oBao.send();  
          //服务器端处理返回的是经过escape编码的字符串.  
          document.all.username.value=unescape(oBao.responseText)  
  }  
  </script>  
  <input   type="button"   onclick="GetResult(document.all.userid.value)"   value="Get"><br>  
  userid:<input   type="text"   name="userid"><br>  
  username:<input   type="text"   name="username">  
   
   
  server.asp     服务器端处理.  
   
  <%   @Language="JavaScript"   %>  
  <%  
  function   OpenDB(sdbname)  
  {  
  /*  
    *---------------   OpenDB(sdbname)   -----------------  
    *   OpenDB(sdbname)    
    *   功能:打开数据库sdbname,返回conn对象.  
    *   参数:sdbname,字符串,数据库名称.  
    *   实例:var   conn   =   OpenDB("database.mdb");  
    *   author:wanghr100(灰豆宝宝.net)  
    *   update:2004-5-12   8:18  
    *---------------   OpenDB(sdbname)   -----------------  
    */  
          var   connstr   =   "Provider=Microsoft.Jet.OLEDB.4.0;   Data   Source="+Server.MapPath(sdbname);  
          var   conn   =   Server.CreateObject("ADODB.Connection");  
          conn.Open(connstr);  
          return   conn;  
  }  
  var   sResult   =   "";  
  var   oConn   =   OpenDB("data.mdb");  
  var   userid   =   Request("userid");  
  var   sql   =   "select   username   from   users   where   userid='"+userid+"'";  
  var   rs   =   oConn.Execute(sql);  
  if(!rs.EOF)  
  {  
          sResult   =   rs("username").Value;  
  }  
  else  
  {  
          //加入容错.2004-5-30   10:15  
          sResult   =   "Sorry,没有找到..."  
  }  
  //escape解决了XMLHTTP。中文处理的问题.  
  Response.Write(escape(sResult));  
  %>  
   
  数据库设计   data.mdb  
  表users.  
  字段  
  id     自动编号  
  userid     文本  
  username   文本  
   
  表:users   数据:    
  id   userid     username  
  1   wanghr100   灰豆宝宝.net  
     
  Top

2 楼sjt(掌握星光)回复于 2005-04-03 23:38:15 得分 0

在对方页面没有指定编码的情况下抓回的数据中的中文是乱码呀……用任何组件都是这样,xmlhttp中文处理程序我加上了的Top

3 楼poron9(上帝之手)回复于 2005-04-04 00:36:57 得分 0

你的结果读取不要使用responsetext,而是要用ResponseBody,把结果视用二进制流处理  
  然后用下面的函数进行内容转换就行。  
  示例:  
  Set   Http   =   Server.CreateObject("MSXML2.XMLHttp")  
  Http.Open   "POST",   Url,   False  
  Http.Send    
  ReSult   =   bytes2BSTR(Http.ResponseBody)  
   
  Response.Write   ReSult    
   
  Function   bytes2BSTR(vIn)  
          Dim   strReturn  
          Dim   I,   ThisCharCode,   NextCharCode  
          strReturn   =   ""  
          For   I   =   1   To   LenB(vIn)  
                  ThisCharCode   =   AscB(MidB(vIn,   I,   1))  
                  If   ThisCharCode   <   &H80   Then  
                          strReturn   =   strReturn   &   Chr(ThisCharCode)  
                  Else  
                          NextCharCode   =   AscB(MidB(vIn,   I   +   1,   1))  
                          strReturn   =   strReturn   &   Chr(CLng(ThisCharCode)   *   &H100   +   CInt(NextCharCode))  
                          I   =   I   +   1  
                  End   If  
          Next  
          bytes2BSTR   =   strReturn  
  End   Function  
  Top

4 楼sjt(掌握星光)回复于 2005-04-04 16:08:39 得分 0

这样做还是不行的……  
  http://www.booksky.biz/Book.aspx?BookID=244  
  你试试看采集这个页面,返回来的还是乱码……Top

5 楼poron9(上帝之手)回复于 2005-04-07 13:18:33 得分 50

Set   Http   =   Server.CreateObject("MSXML2.XMLHttp")  
  Http.Open   "GET","http://www.booksky.biz/Book.aspx?BookID=244",False  
  Http.Send  
  ReSult   =   Http.ResponseText  
  Response.Write   ReSult    
  Response.end  
   
  这样就不是乱码了Top

6 楼sjt(掌握星光)回复于 2005-04-17 00:23:10 得分 0

谢谢……你真是个天才……Top

相关问题

  • tcp抓取网络页面问题
  • 抓取页面的简单问题
  • 请教如何抓取ssl加密页面的内容,https://..
  • PHP怎样抓取需要登录的页面内容?
  • file_get_contents抓取页面不全问题
  • 100分求解 页面抓取的登录问题
  • xml抓取页面源代码,得到的结果是乱码。。。
  • 一个HTML页面的表格中的数据,怎么抓取
  • 我什么我的抓取网页程序抓取到的页面数据不全?谢谢。
  • 对那些需要密码验证的页面,如何抓取其内容?

关键词

  • 页面
  • 数据
  • 服务器
  • 中文
  • 服务器端
  • xmlhttp
  • thischarcode
  • vin
  • 提交
  • 无刷新

得分解答快速导航

  • 帖主:sjt
  • poron9

相关链接

  • Web开发类图书

广告也精彩

反馈

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