好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

搜索的思考

搜索的思考

前段时间上了某论坛的技术讨论区,习惯性的打开搜索看有没有我需要的内容,一登陆账号,发现自己被禁言了,连基本的搜索功能也被限制了。无奈只能手动的一个一个会找帖子。我去,竟然有200多页,每页有40第数据,这样纯手工的方式实在是太蛋疼了。

    前段时间自己不是写了一个小爬虫吗?于是我的个人论坛搜索器开始构建了。

     一,整体构建

二,实际编码

1,数据读取编码:

读取网页有很多种方法,第一读取网页我选择的是最简单的方式 

static string GetPage(int page)
{
  string reuslt = string.Empty;
  System.Net.WebClient wb = new System.Net.WebClient();
  reuslt = wb.DownloadString("http://xx.xxx.xx/thread0806.php?fid=7&search=&page=" + page);
  return reuslt;
}

直接利用webclient 读取内容:

咦,这是怎么回事?

直接访问是不可以的,哪里出错了呢?

难不成是地址出错了?我重新检查了一次没有拼错,那换成其它地址呢?

测试可以使用,那就是说这种请求方式只对百度有效。

那说明:直接使用webClinent类来请求 xx.xxx.xx这种网站是不可行的,因为它会来接收你的请求头的信息来判断是人工发出的请求还是非人工发出的请求。

如何构造请求头是关键!

那换用另一种方式来请求来,如果要构建新的请求方式,那首先要明白,一次“人工的请求方式”应该是怎么样的,打开chrome,监视了一次请求,得到结果如下:

一次合理的请求方式包含哪些信息呢?

url:请求地址

Method:请求方式

Headers:

Accept:本次请求得到的回应的数据格式,版本

Accept-Encoding:编码格式(gzip格式)

Accept-Language:中文

Cache-Control:缓存设置

User-Agent:请求标识头部分

OK,这些既然得到了,那可以开始构建一次正常的请求了。

   static   string  Getpage( int   page)
        {
            System.IO.Stream response;
            System.IO.StreamReader sr;
              string  result =  string  .Empty;
              string  domain =  "  http://xx.xxx.xx/thread0806.php?fid=7&search=&page=  "  +  page;
            HttpWebRequest request  =  (HttpWebRequest)WebRequest.Create(domain);
            request.Method  =  "  GET  "  ;
            request.Accept  =  "  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  "  ;
            request.Headers.Set(  "  Accept-Charset  " ,  "  GBK,utf-8;q=0.7,*;q=0.3  "  );          
            request.Headers.Set(  "  Accept-Language  " ,  "  zh-cn,zh;q=0.5  "  );
            request.Headers.Set(  "  Accept-Encoding  " ,  "  gzip,deflate,sdch  "  );
            request.Host  =  "xx.xxx.xx  "  ;           
            request.UserAgent  =  "  Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11  "  ;           
            request.KeepAlive  =  true  ;
            HttpWebResponse httprp  =  (HttpWebResponse)request.GetResponse();
            httprp.Headers.Set(  "  Content-Encoding  " ,  "  gzip  "  );
            response  =  httprp.GetResponseStream();
            sr  =  new   System.IO.StreamReader(response,Encoding.UTF8);         
            result  =  sr.ReadToEnd();
            response.Close();
            sr.Close();
              return   result;
        } 

OK,那测试一下看得到数据没有.

怎么都是乱码呢?

设置读取的时候都是正常的UTF-8编码,如果读取的编码没有问题,那问题应该出在传送的编码上面。我竟然忽略了返回的格式了

  httprp.Headers.Set("Content-Encoding", "gzip");

很明显,文档经过了Gzip格式进行压缩,然后在传送过来了,那需要解码一次:代码如下

?

static   string   Getpage( int   page)

    {

        System.IO.Stream response;

        System.IO.StreamReader sr;

        string   result = string .Empty;

        string   domain = " http://xx.xxx.xx/thread0806.php?fid=7&search=&page= "   + page;

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(domain);

        request.Method = "GET" ;

        request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" ;

        request.Headers.Set( "Accept-Charset" , "GBK,utf-8;q=0.7,*;q=0.3" );         

        request.Headers.Set( "Accept-Language" , "zh-cn,zh;q=0.5" );

        request.Headers.Set( "Accept-Encoding" , "gzip,deflate,sdch" );

        request.Host = "xx.xxx.xx" ;          

        request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11" ;          

        request.KeepAlive = true ;

        HttpWebResponse httprp = (HttpWebResponse)request.GetResponse();

        httprp.Headers.Set( "Content-Encoding" , "gzip" );

        response = httprp.GetResponseStream();<br>            //重新修改后的代码

        sr = new   System.IO.StreamReader( new   GZipStream(response, CompressionMode.Decompress), Encoding.GetEncoding( "gb2312" ));  

        result = sr.ReadToEnd();

        response.Close();

        sr.Close();

        return   result;

    }

那得到结果没有呢?

OK,正常得到结果!那下面的工作就简单了~

PS:晚上继续更新第二部分,(数据展示内容---正则表达式的应用)

 

分类:  Project For Fun

标签:  爬虫 ,  表单提交 ,  winform Get请求 ,  httprequest

HTML5资料整理

 

项目组要做html5这块,花了一周左右时间收集的,快有一年时间了,部分内容需要更新,仅供参考。

 

几点说明:

本次收集的信息以 HTML5 为主,这里的 HTML5 ~=   HTML5 + Javascript + CSS3 以下资料的协议相关部分主要来自 W3C 、 WHATWG ; demo 库和开发工具等主要来自 IT 企业、技术组织的官网或其信息站点 W3C 正式发布的协议称为Recommendation(推荐),下文中“协议”、“推荐”、“ REC ”是同义词;“协议”未通过之前以“草案”的形式存在

[ 基本信息 ]

2 个组织

W3C ,万维网联盟, Web 标准制定者 WHATWG ,由浏览器厂商的员工发起的非正式组织,致力于改进 HTML ,其 成员 来自 Mozilla 、 Opera 、 Apple 、 Google 等

HTML5 发展

HTML 4.01 于 1999 年发布, 2000 年 W3C 发布了 XHTML 1.0 第一份 正式草案公布于2008 . 1 . 22, 最新草案 发布于 2011.9.6 HTML5草案的前身为 Web Applications 1.0 ,2004年由WHATWG提出,2007年被W3C接纳,并成立了新的HTML工作组(合并 XHTML 团队)

“WHATWG致力于web表单和应用程序,而W3C专注于XHTML 2.0。在2006年,双方决定进行合作,来创建一个新版本的HTML”   ——   摘自 W3school 。

WHATWG 目前仍然是 HTML5 的主力, HTML5 的最新进展会发布在这两个组织的官网,以下默认使用 W3C 公布的信息

HTML5的新特性 体现在下图显示的 8 个部分, HTML5 希望创建一个有本地存储、富客户界面、高效网络 IO 的 Web App 。 HTML5 Presentation 是以下文字和图表更加直观的版本:

语义( Semantic ),新增 header 、 footer 、 nav 、 fig 等含有语义的标签,以及一系列含有语义的标签属性 离线 & 存储( Offline&Storage ),主要包括 Local Storage 、Indexed DB、File API 设备访问( Device Access ),定位信息已经广泛应用,其他还有视频、音频流(如 语音输入   ),移动设备的传感器(如方向传感器) 网络连接( Connectivity ),增加 Web Socket 、服务器数据推送 多媒体( Multimedia ),增加 video 、 audio 标签,提供原生的视频、音频访问 图形接口( GDI ),增加 canvas 标签,提供 2D , 3D GDI ,现已有第 3 方的 WebGL 可以提供3D加速渲染 性能 & 整合(Performance & Integration),Web Workers实现脚本后台运行,并提供前后台交互接口,XMLHttpRequest 2提供更好的网络 IO CSS3 ,目前仍在开发之中,主流浏览器已经支持 其中部分特性 , Dashboard 是更完整的 CSS3 demo

最新进展参见 WHATWG   News 和 W3C   HTML 首页 :

最新草案 发表于 2011.9.6 W3C 希望能在 2014 让 html5 成为Recommendation ,参见 html5 FAQ

[Demo 库 ]

这里将所有 demo 库粗略分为应用和游戏,涵盖了组织、企业、个人开发或收集的 demo

[ 应用 demo 库 ]

Edge 的 Samples , Adobe   Edge 制作的 html5 动画

Adobe 请 Rain 制作的logo 动画 1 、 动画 2 比较精美的 齿轮动画 过山车动画 2 个 Banner 广告 简单的 banner 动画广告 , js 库文件 138KB ,   动画自身 js+css 10KB 另一个 Banner 公益广告

Html5Rocks ,   Google   demo 库

HTML5 Presentation   , h5 版 ppt ,详细介绍了 h5 的新特性,里面的 demo 可直接玩 WebGL Globe ,使用 WebGL 3D 加速,展示 canvas 3D 特性 Ascii Art ,使用 WebSocket 同步服务器数据(字符视频) Notification Time , Notification API ,提供页面范围以外的消息提示 , 目前主流浏览器中只有 chrome 实现 Drag n Drop Photos ,   拖拽文件到浏览器,使用 DnD , File API Page Flip ,书本翻页,基于 CSS3 2D transform 和 animation

html5demos   ,人气很高的第三方 demo 库,提供按特性过滤查看 demo

Web O' Wonder ,奇幻网络, Mozilla 提供的 demo 库

Dashboard ,展示 HTML5 、 CSS3 、 SVG 、 JS 等技术的新特性, CSS3 的 demo 很丰富

Safari   Technology   Demos , Apple 提供的 demo 库

Photo Transitions ,图片切换的动画效果 Gallery ,幻灯片,多种展现模式:水平、垂直、 3D 滚动 .. 虚拟现实 (VR) ,基于 css3 transforms 360° , 360° 旋转,本以为是 3D 效果,竟然用了 72 张图片

IE Test Drive , Microsoft 为 IE 开的 demo 库站点,大量 html5 的 demo

10K Apart , HTML5 竞赛作品,基本要求是打包后 10KB 以内

canvasdemos ,专注于 canvas 的 demo 库

HTML5 研究小组 收集的 demo 库 ,“ HTML5研究小组 ”是中国首个HTML5推广和交流的开放组织

一些零散的 demo :

iGrapher ,很炫的报表程序 Cloudkick , 3D ,显示云服务器状态

[ 游戏 demo 库 ]

Mozilla Labs Gaming , Mozilla 官方的 html5 游戏 demo 库,下面是库中获奖作品

M a rble Run ,冠军游戏 (best web-iness) ,画面精细, chrome13 下运行较流畅(汗) Robots are people too ,获得“最有趣奖”( most fun )

html5games ,第三方游戏 demo 库

html5 版的 俄罗斯方块

HTML5 研究小组 收集的游戏 demo 库

游戏引擎: Impact 、 Rocket 、 GameClosure 、 YoYo

一些零散的 demo :

CubeSpace ,搭积木,强大的回放功能

[ 兼容性 ]

H tml5   test ,提供 html5 新特性的检测

html5 兼容性手册

Where can I use.. ,提供详尽的兼容性信息,提供按特性查找 HTML5 readiness ,数据来源于前者,提供按时间查询 HTML5 兼容性,有趣的展现形式

Compatibility Master Table , quirksmode 提供的兼容性数据库,涵盖了 DOM 、 CSS 、 JS 等

HTML5 in Firefox , Mozilla   提供的 Firefox html5 兼容性列表

HTML5 in Chrome , Chromium 提供的开发进度信息

HTML5 in IE : 官方版本 , 非官方版本 ,

Mobile HTML5 , Mobile Browser 对 HTML5 的支持

兼容性工具

Compatibility Detector   for Firefox, Firefox 插件 W3C HTML 验证 ,支持对 html5 文档进行验证 W3C CSS 验证 , 还不支持 CSS3 html5shiv ,让 IE 支持大部分 html5 特性, 2KB

[ 开发 ]

开发手册 & 文档

HTML5   参考手册( 中文版 , 英文版 ), W3school 的入门级手册,内含简单的 demo HTML5: Edition for Web Authors , W3C 面向 web 开发者的高级手册   WHATWG 版本 HTML5 full specification ,完整版手册,主要面向浏览器厂商   WHATWG 版本 Dive Into HTML5 ,免费的在线 h5 教程 Mozilla HTML5

Edge , Adobe 开发的 html5 动画制作工具,生成的动画依赖的库较多,直接用于 mobile 设备文件过大

Swiffy , flash 转 html5 工具

Modernizr , javascript 库,对 html5 、 css3   做退化处理

CSS3-HTML5 之家 ,国内的一个站点

HTML5 研究小组

Scirra , HTML5   游戏开发平台(付费)

 

分类:  Web前端

标签:  html5

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于搜索的思考的详细内容...

  阅读:55次