在QT的网路模块中提供了网络编程的相关接口来实现http的访问,其中包含了一些低级的类:QTcpSocket、QTcpServer和QUdpSocket,和一些高级的类:QNetworkRequest、QNetworkReply和QNetworkAccessManager,我们现在主要使用这些高级的类来实现网页的获取。
实现简单网页获取
我们可以创建一个控制台程序来获取一些数据。主要是在这个文件中加入network,就可以进行网络编程了。
#qtspider.pro
QT += core network
QT -= gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
TARGET = qtspider
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
HEADERS +=
//main.cpp
#include
#include
#include
#include
#include
#include
class qtspider:public QWidget
{
Q_OBJECT
public:
explicit qtspider(QWidget *parent = 0);
private slots:
void replyfinish(QNetworkReply *);
private:
QNetworkAccessManager *manager;
QString *content;
};
qtspider::qtspider(QWidget *parent)
{
content = new QString();
manager=new QNetworkAccessManager(this);
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyfinish(QNetworkReply *)));
manager->get(QNetworkRequest(QUrl("http://www.jianshu.com/c/RfYyQj")));
}
//这里使用正则表达式来从获取网页中得到我们需要的数据,这里写的比较简单。
void qtspider::replyfinish(QNetworkReply *reply)
{
QString result=reply->readAll();
QRegExp exp("(.*)");
exp.setMinimal(true);
int pos=0;
while((pos=exp.indexIn(result,pos))!=-1){
qDebug()<
qDebug() << exp.cap(1);
qDebug()<
pos += exp.matchedLength();
}
reply->deleteLater();
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
qtspider *spider=new qtspider();
return a.exec();
}
#include "main.moc"
最后这一段简单的代码获取的是简书散文主题当前页文章的标题,至于如何得到更多信息,还得研究一下,结果是这样的:
2017-04-26_212823.png
错误:undefined reference to "vtable for xxx"
解决:在main.cpp的末尾加上
#include "main.moc"
另外,关于正则表达式,这里分享给大家一个关于正则表达式测试的工具:
http://regexpal.isbadguy.com/