远程获得服务器html文挡,并解析其内容(初步)

 

 

基本技术:  基于tcp协议的winsocket 通信    COM对象(具体就是MSHTML)

 

基本流程: 通过基于tcp协议的socket,与服务器端通信,用"get" 命令得到想要的html文档.

                   然后通过使用MSHTML对象提供的接口,对目标文档进行分析,提取相应元

                  素内容.ps:socket用的通信方式是阻塞式.

 

伪代码:   WSAStartup()  (winsock网络协议的初始化)

                                                    ||

           gethostbyname()  (对得到的域名进行解析,得到服务器的ip地址,端口一般是默认的80)    

                                                    ||                 

               socket()  (创建连接通信用的SOCKET对象)

                                                    ||

                connect()     (通过socket对象连接服务器)

                                                    ||

           构造"get"包 (完整的get命令包的格式如下:GET   http://bbs.uestc.edu.cn/main.html /r/n)

                                                    ||

                                  send()    (向服务器发送请求包)      

                                                    ||

                          recv()   (得到服务器上指定文档 ,并存入数据缓冲区)

                                                    ||

                    Shutdown() ; WSACleanup() (关闭连接,清除SOCKET资源)

                                                    ||

         CoInitialize()  (初始化COM库,为使用COM对象--MSHTML做准备,这个可以放到使用

                                       COM对象之前的任何地方)

                                                    ||
                          MSHTML::IHTMLDocument2Ptr pDoc;
                          MSHTML::IHTMLDocument3Ptr pDoc3;
                          MSHTML::IHTMLElementCollectionPtr pCollection;
                          MSHTML::IHTMLElementPtr pElement;

                    CoCreateInstance()           (创建MSHTML对象,并传出Document接口指针)

                  SafeArrayCreateVector()     (把得到的文档数据缓冲的内容存储到SafeArray中并读入到  document中);

                                                     ||

                   pCollection = pDoc->getElementsByTagName(L"P")  (取得文档中元素为"P"的集合)

                                                     ||

                              然后对pCollection 进行遍历,取出需要的东西

                    (几个关键的接口:      pElement = pCollection->item(i, (long)0);

                                                         pElement->getAttribute("id", 2)

                                                         BSTR tmp;
                                                        pElement->get_innerHTML(&tmp);

                并且注意:COM使用的字符串都是基于UNICODE的,要注意对字符串的转换:

                              _com_util::ConvertBSTRToString()   (将UNICODE 转换成ASIIC)

 

 以上是简单流程,函数的详细使用方法,查阅MSDN .

 

                                  

                                              

                           

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值