C/C++ | Qt 实现爬虫功能,爬取CSDN博客文章

话不多说,先看程序运行截图:

C/C++ | Qt 实现爬虫功能,爬取CSDN博客文章_第1张图片

注意:

 本人没有看过爬虫相关的书籍,第一次写这种程序,这个程序是半屌子的,原理很简单,没有学习过爬虫的朋友,也可以写。

程序思路如下:

1.下载要爬网站的页面。

2.用正则表达式去掉空格,使得程序处理得快。

3.因为CSDN博客文章前面的链接都一样,所以我们只要提取尾部文章编号。

(如:http://blog.csdn.net/qq78442761/article/details/xxxxxxxx

4.扫描整个文件,得到文章标题。

5.保存为csv格式文件


源码下载如下链接:(还在审核,不知道能不能下载)

http://download.csdn.net/download/qq78442761/10245494


关于界面,在此不再说明。

来说下下载网页(此处只有伪代码,源码请从上面的链接下载):

void Widget::on_id_getWebCode_pushButton_clicked()
{
    const QString URLSTR=ui->id_url_lineEdit->text();
    const QString FILE_NAME=ui->id_SaveFileName_lineEdit->text();
    QUrl url(URLSTR);
    QEventLoop loop;
    QNetworkAccessManager manager;

    //发出请求
    QNetworkReply *reply=manager.get(QNetworkRequest(url));

    //请求结束并下载完成后,退出子事件循环
    connect(reply,SIGNAL(finished()),&loop,SLOT(quit()),Qt::UniqueConnection);

    //开启子事件循环
    loop.exec();

    //将读取到的信息写入文件
    sourceCode=reply->readAll();
    QFile file(FILE_NAME);
    file.open(QIODevice::WriteOnly);
    QTextStream out(&file);
    out<10){
        QMessageBox::information(this,tr("提示"),tr("网站数据获取成功!"),QMessageBox::Ok);
        hasSourceFile=true;
    }
    else{
        QMessageBox::information(this,tr("提示"),tr("网站数据获取失败!"),QMessageBox::Ok);
        hasSourceFile=false;
    }
    file.close();
    if(file.size()<10){
        file.remove();
    }
}


下面就得到了txt文件(这文件就是网站浏览器读取到的源码)

接下来用正则表达式去空格:

    QString divisionSource=sourceCode;
    if(!urlLack.isEmpty()&&!titleLack.isEmpty()){
        divisionSource.remove(QRegExp("\\s"));


关于如何寻址指定字符串,本程序提供了2个方法,一个是把QString转成char型,进行查找,代码如下:

        int urlNumtemp=0;   //为了添加webURLAndTitle[128][2]这个
        for(int i=0;iid_URL_division_lineEdit->text()+temp;
                            qDebug()<


第二个是用QString里面的mid函数(估计效率很低)进行查找:

        //下面是提取置顶title
        int urlNum=0;   //为了添加webURLAndTitle[128][2]这个
        for(int i=0;i


最后是保存为CSV文件

void Widget::saveURLandTilte()
{
    QFile file("URL&Title.csv");
    file.open(QIODevice::WriteOnly);
    QTextStream out(&file);
    for(int i=0;i


感谢大家阅读。



你可能感兴趣的:(Qt,C/C++,HackerCode)