精英盒子 -> 程序设计 -> QT使用GET方式抓取网页源码-教程 [打印本页]

jybox 2011-08-22 20:02

QT使用GET方式抓取网页源码-教程

现在嘛,网络的世界,在写出HostsEdit这样简单的程序之后,我就开始转战网络,第一步就是实现B/S结构
先来个效果图:
[attachment=27]

然后上源码,源码其实很简单
用QT Creator建立基于QWidget的程序,用UI编辑器放一个名为tB的QTextBrowser
main.cpp不用动
下面是widget.h和widget.cpp的内容
  1. //widget.h

    #ifndef WIDGET_H
    #define WIDGET_H

    #include <QWidget>
    #include <QUrl>
    #include <QtNetwork/QNetworkAccessManager>
    #include <QtNetwork/QNetworkRequest>
    #include <QtNetwork/QNetworkReply>

    namespace Ui {
        class Widget;
    }

    class Widget : public QWidget
    {
        Q_OBJECT

    public:
        explicit Widget(QWidget *parent = 0);
        ~Widget();
    public slots:
        void ReadyRead();

    private:
        Ui::Widget *ui;
        QNetworkAccessManager *manager ;
        QNetworkReply *reply ;
    };

    #endif // WIDGET_H


  1. //widget.cpp

    #include "widget.h"
    #include "ui_widget.h"
    #include <QTextCodec>
    Widget::Widget(QWidget *parent):QWidget(parent),ui(new Ui::Widget)
    {
        ui->setupUi(this);
        //字符集
        QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
        
        manager= new QNetworkAccessManager(this);
        QNetworkRequest request ;
        request.setUrl(QUrl("http://jybox.net/index.php"));
        reply = manager->get(request);
        connect(reply, SIGNAL(finished()), this, SLOT(ReadyRead()));
    }
    Widget::~Widget()
    {
        delete ui;
    }
    void Widget::ReadyRead()
    {
        ui->tB->setText(QString::fromUtf8( reply->readAll()));
    }






jybox 2011-08-22 20:08
下一步是研究怎么用QT发post

再下一步就是C/S结构的程序了

abreto 2011-08-22 20:29
来过,

pcliker 2011-08-22 21:40
哇!完全看不懂啊!

jybox 2011-08-22 22:47
你看不懂就对了   前面是html,后面是C++

话说你今天回了多少帖子啊...不过没关系  明天继续

outman 2011-08-23 08:57
哇!楼主好厉害耶!楼主你写的不是英语吗?我怎么看不懂?还有这么多奇怪的符号!!难道这是外星文?膜拜楼主!!!连外星文都会!

abreto 2011-08-23 09:38
膜拜膜拜!!
虽然我看不懂,但是我觉得他要表达的意思可能是办证,

编程土豆 2011-09-22 22:08

abreto 2012-01-03 16:05
唔..不错..我来研究一下..

jybox 2012-01-03 20:51
abreto:[表情] 唔..不错..我来研究一下.. (2012-01-03 16:05) 

你咋研究Qt了呢

abreto 2012-01-04 22:32
jybox:你咋研究Qt了呢 (2012-01-03 20:51) 

我一直在研究Qt阿..

pdl 2012-06-12 12:46
我都用socket手动实现

jybox 2012-06-12 18:27
pdl:我都用socket手动实现 (2012-06-12 12:46) 

蛋痛,话说我想用Socket实现一个邮件发送类,SMTP协议,但是看了附件的编码方式,我蛋痛了

pdl 2012-06-12 18:44
jybox:蛋痛,话说我想用Socket实现一个邮件发送类,SMTP协议,但是看了附件的编码方式,我蛋痛了 (2012-06-12 18:27) 

附件可以用现成程序,我就用纯socket实现了一个简易httpd(支持中文)

jybox 2012-06-12 19:59
pdl:附件可以用现成程序,我就用纯socket实现了一个简易httpd(支持中文) (2012-06-12 18:44) 

什么现成程序...

pdl 2012-06-12 20:28
uuencode

jybox 2012-06-12 21:20
pdl:uuencode (2012-06-12 20:28) 

依赖这个不太好...不完美,还是自己实现好点...

zzh8829 2012-06-13 05:01
这个。。。
直接网页上右键 选view source code 不就完了..

你这个有什么优势... ';
}
window.onbeforeunload = function() {
saveData('msg', document.FORM.atc_content.value);
}
if (FetchCookie('ds') == 1) {
try{dataStorage.load();}catch(e){}
}
function showFace() {
var menus = getObj("face_tab").getElementsByTagName('li');
if(menus){
showTabBtn(menus.length);
}
}
function checkGDkey(e){
var e=e||window.event;
var keyCode=e.keyCode||e.which;
if(keyCode==13){
setFormChecked();
}
}
function setFormChecked() {
document.FORM.isformchecked.value = 2;
if (document.FORM.gdcode) document.FORM.gdcode.value = getObj('input_gdcode').value;
if (document.FORM.qanswer) document.FORM.qanswer.value = getObj('input_qanswer').value;
closep();
checkpost(document.FORM);
return true;
}
function changeHiddenGd(obj) {
if (obj.name != 'FORM') return false;
try {
var checks = getElementsByClassName('sitegdcheck', getObj('fpt_check'));
for (var i=0; i < checks.length; i++) {
if (checks.src) checks.src = checks.src.replace(/t=\d+|nowtime=\d+/,'t='+new Date().getTime());
if (typeof checks.onclick == 'function') checks.onclick();
}
} catch(e){}
return true;
}
function closePopGd() {
document.FORM.Submit.disabled = false;
closep();
}
function changeReplyRewardNum() {
var replyrewardnum = getObj('replyrewardnum'),
leftreplyrewardnum = getObj('leftreplyrewardnum');
if (!replyrewardnum || !leftreplyrewardnum) return false;
var newnum = parseInt(leftreplyrewardnum.innerHTML) - parseInt(replyrewardnum.innerHTML);
if (newnum >= 0) {
leftreplyrewardnum.innerHTML = newnum;
}
return true;
}
window.onReady(showFace);
</script>
<!--快速版块浏览-->
<div id="photo_pop_mask" onclick="readImg.hidePhoto()" class="pImg_bg" style="display:none"></div>
<div id="photo_pop" class="pImg_wrap" style="display:none"><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td class="bcr1"></td><td class="pibg1"></td><td class="bcr2"></td></tr><tr><td class="pibg4"></td><td><div class="pImg tac">
<div id="imgLoading" class="imgLoading" style="margin:auto;">
<div class="aPre" id="prephoto" onclick="readImg.prevPhoto()" title="上一张"></div>
<div class="aNext" id="nextphoto" onclick="readImg.nextPhoto()" title="下一张"></div>
<img id="photo_path"  src="images/water/watermark.jpg" align="absmiddle" />
</div>
<div class="cc w" style="padding:10px 5px 5px;">
<div class="fl mr10" id="photo_pop_page"></div><!--a href="javascript:;" class="fl mr20" onclick="readImg.viewAll()">原图</a-->
<a href="javascript://" class="pImg_close" onclick="readImg.hidePhoto()">关闭</a>
</div>
</div></td><td class="pibg2"></td></tr><tr><td class="bcr4"></td><td class="pibg3"></td><td class="bcr3"></td></tr></tbody></table></div>
<!--弹窗遮罩-->
<!-- //start reply管理弹出 -->
<div id="postbatch" style="display:none" class="popout">
<table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="bgcorner1"></td><td class="pobg1"></td><td class="bgcorner2"></td></tr><tr><td class="pobg4"></td><td>
<div class="popoutContent">
<div>
<div class="popTop" style="cursor:move;" onmousedown = "read.move(event);">
<a href="javascript:void(0)" class="adel" onclick="closep()">关闭</a>
<span class="mr20">选中<span class="b s2" id="select_count">1</span>篇</span>
</div>
<div class="p10 cc">
<a href="javascript:;" onclick="formclick(document.delatc,'operate.php?action=showping&page=1',8);return false;" class="mr5">评分</a></div>
<div class="popBottom cc">
<label class="fl"><input type="checkbox" onclick="replyManage.checkall(this);" value="" id="ajaxall" name="ajaxall">全选</label>
</div>
</div>
</div>
</td><td class="pobg2"></td></tr><tr><td class="bgcorner4"></td><td class="pobg3"></td><td class="bgcorner3"></td></tr></tbody></table>
</div>
<!-- //end reply管理弹出 -->
</div></div><!--.main-wrap,#main End-->
<div class="footer-wrap">
<div id="bottom"></div>
<div id="footer">
<div class="mb5">
<div class="bottom tac">
<span class="mr10"><a id="nav_key_up_45" href="http://jybox.net/jyblog/soft/lightphp/" title="一个轻量级的PHP开发框架" target="_blank">伟大的LightPHP</a></span><span class="gray mr10">|</span><span class="mr10"><a id="nav_key_up_12" href="sendemail.php" title="" >联系我们</a></span><span class="gray mr10">|</span><a href="job.php?action=erasecookie&verify=2e8bbc6b" rel="nofollow">清除Cookies</a>
</div>
</div>
<div class="f10 s6 tac">
<p class="mb5">Powered by <a href="http://www.phpwind.net/" target="_blank" class="s4">phpwind v8.7</a> <a href="http://www.phpwind.com/certificate.php?host=jybox.net" target="_blank" rel="nofollow">Certificate</a> Copyright Time now is:06-13 05:00 <br />©2003-2011 <a href="/" target="_blank">精英盒子</a> 版权所有 Gzip enabled  <span id="windspend">Total 0.249340(s) query 28,</span> <link href="http://jybox.net/bbs/highlight.css" rel="Stylesheet" type="text/css"/>
<script type="text/javascript">
var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://");
document.write(unescape("<script src='" + _bdhmProtocol + "hm.baidu.com/h.js%3F77016691cd5a049005dba568b5164b59' type='text/javascript'></script>"));
</script>


<span id="stats"></span>
<script type="text/javascript" src="http://js.tongji.linezing.com/2584023/tongji.js"></script>
<noscript>
<a href="http://www.linezing.com" target="_blank"><img alt="tongji" src="http://img.tongji.linezing.com/2584023/tongji.gif"/></a>
</noscript>
</p>
</div>
</div>
</div>
</div>
<div style="height:25px;"> </div><link rel="stylesheet" href="images/toolbar.css?20111111" />
<div class="startbar-wrapper fixed">
<!--[if IE 6]>
<iframe frameborder="0" style="position:absolute;width:98%;height:25px;filter:Alpha(opacity=0);" scrolling="no"></iframe>
<![endif]-->
<div id="menu_forumlist" style="display:none;">
<div class="sbar-box-a" style="width:700px;">
<div class="sbar-title" style="cursor:pointer" onclick="try{pw_bottom.hiddenTab();read.close();}catch(e){read.close();}">
<span class="adel">隐藏</span>
<span id="title_forumlist" class="b">快速跳转</span>
</div>
<div class="sbar-box-b">
<div class="forum-list-popout">
<dl class="cc">
<dt>
<a href="index.php?cateid-1.html">管理</a>
</dt>
<dd class="cc">
<a href="thread.php?fid-6.html" onclick="return pwForumList(true,gIsPost,6);">管理</a>
</dd>
</dl>
<dl class="cc">
<dt>
<a href="index.php?cateid-16.html">计算机技术</a>
</dt>
<dd class="cc">
<a href="thread.php?fid-19.html" onclick="return pwForumList(true,gIsPost,19);">零毫秒</a>
<a href="thread.php?fid-3.html" onclick="return pwForumList(true,gIsPost,3);">程序设计</a>
</dd>
</dl>
<dl class="cc">
<dt>
<a href="index.php?cateid-17.html">非技术区</a>
</dt>
<dd class="cc">
<a href="thread.php?fid-18.html" onclick="return pwForumList(true,gIsPost,18);">生活</a>
<a href="thread.php?fid-21.html" onclick="return pwForumList(true,gIsPost,21);">超级水版</a>
<a href="thread.php?fid-5.html" onclick="return pwForumList(true,gIsPost,5);">垃圾桶</a>
</dd>
</dl>
</div>
</div>
</div>
</div>
<div class="startbar-close fl" id="startbar-open" onclick="pw_bottom.showToolBar('open');" style="display:none" title="显示快捷栏"></div>
<a class="startbar-open fl" id="startbar-close" onclick="pw_bottom.showToolBar('close');"  title="隐藏快捷栏"></a>
<div class="startbar" id="startbar" >
<div class="startbar-ui cc">
<span class="fr">
<span class="fl" style="display:none">
<span class="app-f app-current" style="margin-right:-1px" onclick="pw_bottom.hiddenTab('pwb_friend')">在线好友</span>
</span>
<span class="app-f fl" id="pwb_friend">在线好友</span>
</span>
<span class="fr">
<span class="fl" style="display:none">
<span class="app-m app-m-new app-current" style="margin-left:-1px;" onclick="pw_bottom.hiddenTab('pwb_message')">消息</span>
</span>
<span class="app-m app-m-new fl" id="pwb_message" title="查看最新未读消息">消息</span>
</span>
<span class="fl">
<span class="fl" style="display:none">
<span class="app-butt app-current" style="margin-left:-1px;" onclick="pw_bottom.hiddenTab('pwb_app')">我的菜单</span>
</span>
<span class="app-butt fl" id="pwb_app">我的菜单</span>
</span>
<div class="app-using">
<span>
<span style="display:none;float:left;margin-top:-1px;">
<a href="javascript:;" class="app-forum app-us-current" title="浏览版块"  onclick="pw_bottom.hiddenTab('pwb_forumlist')" >浏览</a>
</span>
<span id="pwb_forumlist"><a href="javascript:;" class="app-forum" title="浏览版块" style="cursor: pointer;">浏览</a></span>
</span>
<span>
<span style="display:none;float:left;margin-top:-1px;">
<a href="javascript:;" class="app-thread app-us-current" title="发帖"  onclick="pw_bottom.hiddenTab('pwb_postlist')" >发帖</a>
</span>
<span id="pwb_postlist"><a href="javascript:;" class="app-thread" title="发帖" style="cursor: pointer;">发帖</a></span>
</span>
<span>
<span style="display:none;float:left;margin-top:-1px;">
<a href="javascript:;" class="app-diary app-us-current" title="写日志" onclick="pw_bottom.hiddenTab()" >写日志</a>
</span>
<span id="pwb_diary"><a href="javascript:;" onclick="return false;" title="日志" class="app-diary">写日志</a></span>
</span>

  <span>
<span style="display:none;float:left;margin-top:-1px;">
<a href="javascript:;" class="app-blog app-us-current" title="新鲜事" onclick="pw_bottom.hiddenTab()" >新鲜事 <br /></a>
</span>
<span id="pwb_weibo"><a href="javascript:;" onclick="return false;" title="新鲜事" class="app-blog">新鲜事</a></span>
</span>
  <span>
<span style="display:none;float:left;margin-top:-1px;">
<a href="javascript:;" class="app-photo app-us-current" title="传照片" onclick="pw_bottom.hiddenTab()" >传照片</a>
</span>
<span id="pwb_photo"><a href="javascript:;" onclick="return false;" title="传照片" class="app-photo">传照片</a></span>
</span>
<div class="c"></div>
</div>
</div>
</div>
<div id="pwd_app_hidden" style="display:none;">
<div class="sbar-title cc" style="cursor: pointer;padding:5px 10px;" onclick = "pw_bottom.hiddenTab();">
<span class="fr closeicon"><img src="images/wind/index/cate_open.gif" alt="收起" /></span>
<span class="b">我的菜单 </span>
</div>
<h6 class="gray">我的书签</h6>
<div class="listAppItem">
<ul class="cc">
</ul>
</div>
<h6 class="gray" style="background:#faf6ff;">快捷链接</h6>
<div class="listAppItem">
<ul class="cc">
<li><img src="u/images/icon/posts.png" align="absmiddle" alt="posts" /> <a href="apps.php?q=article&">我的帖子</a></li>
</ul>
</div>
<div style="padding:5px 10px;border-top:1px solid #dedede;"><a href="profile.php" class="fr" target="_blank">我的设置</a><a href="">返回首页</a></div>
</div>
<script src="js/bottom.js"></script>
<script>
function submitwrite(o) {
if (getObj('writetext').value == '' || getObj('writetext').value == '想说点什么?') {
showDialog('error','记录内容必须在3~255个字节之间');
return false;
}
ajax.submit(o);
return true;
}
var jypw_bottom = new app_bottom({app:'pwb_app',friend:'pwb_friend',message:'pwb_message',postlist:'pwb_postlist',forumlist:'pwb_forumlist',diary:'pwb_diary',weibo:'pwb_weibo',photo:'pwb_photo'});
</script>
</div>
<script type="text/javascript" src="js/global.js"></script>
<script type="text/javascript" src="mode/area/js/adminview.js"></script>
</body></html>
<script type="text/javascript" src="js/app_global.js"></script>
<script type="text/javascript" src="js/pw_jobcenter.js"></script>
<script>
var openmenu = {'td_u' : 'menu_u','td_sort' : 'menu_sort','td_skin' : 'menu_skin','nav_key_up_18' : 'nav_key_sub_18','nav_key_up_26' : 'nav_key_sub_26','td_userinfomore' : 'menu_userinfomore','td_profile' : 'menu_profile','td_mymenu' : 'menu_mymenu','td_post' : 'menu_post','td_post1' : 'menu_post','td_admin' : 'menu_admin'};
var messagetip=null;
window.onReady(function(){
read.InitMenu();
//消息提示
messagetip=new messageTip(90);
messagetip.init();
});
WINDOW_LOADED=1;
</script>
<script>
onReady(function(){
ajax.send("y.php?action=sync", "");
})
</script>
<script src="http://cs10.phpwind.com/cloud.php?a=pop&charset=utf-8&bid=22062&sid=22062&fid=3&uid=808&tid=127&title=QT使用GET方式抓取网页源码-教程&v=1.1"></script><script src="http://cs10.phpwind.com/cloud.php?a=referer&charset=utf-8&bid=22062&sid=22062&fid=3&uid=808&referer=http%3A%2F%2Fjybox.net%2F&"></script><script src="http://a.tbcdn.cn/s/kissy/1.2.0/??kissy-min.js,template-min.js,sizzle-min.js" ></script><script src="http://cs10.phpwind.com/cloud.php?a=delimitjs&charset=utf-8&bid=22062&sid=22062"></script>
<script type="text/javascript">(function(d,t){var url="http://app.open.phpwind.com/?src=read&url=jybox.net%2Fbbs&sn=jybox.net&fid=3&uid=808&tid=127&c26c87b5=6&charset=utf-8&username=zzh8829&title=QT%E4%BD%BF%E7%94%A8GET%E6%96%B9%E5%BC%8F%E6%8A%93%E5%8F%96%E7%BD%91%E9%A1%B5%E6%BA%90%E7%A0%81-%E6%95%99%E7%A8%8B&_ua=20b7b89ea162de6737&_shr=aHR0cDovL2p5Ym94Lm5ldC8%3D&_sqs=dGlkLTEyNy5odG1s&_ssn=L2Jicy9yZWFkLnBocA%3D%3D&_t=1339621205&_v=5090";var g=d.createElement(t);g.async=1;g.src=url;d.body.insertBefore(g,d.body.firstChild);}(document,"script"));</script><script type="text/javascript">(function(d,t){

var url="http://init.phpwind.net/init.php?sitehash=10UVEBDQgAAAEIAFNVBwYECFtcUlQNVlZRBlgEU1NTCAU&v=8.7&c=0";

var g=d.createElement(t);g.async=1;g.src=url;d.body.insertBefore(g,d.body.firstChild);}(document,"script"));</script>

jybox 2012-06-13 18:30
zzh8829:这个。。。
直接网页上右键 选view source code 不就完了..
你这个有什么优势... [表情]
....... (2012-06-13 05:01) 

我们讨论的不是编程么....




Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.090178 second(s),query:5 Gzip enabled