Qt网络编程:Qt爬虫

爬虫爬取数据的原理就是发送http请求,从返回的数据中解析出想要的数据的过程。

现在来完成一个小功能:爬取http://www.k73.com/down/3ds/list-81-1.html这个网页中的所有图片

获取网页数据:

void Dialog::getHttpData(const QString & modelUrl,QByteArray & data)
{
    QUrl url = QUrl::fromUserInput(modelUrl.toUtf8());
    request.setUrl(url);

    QNetworkReply * reply_ = manager->get(request);
    connect(reply_, QOverload<QNetworkReply::NetworkError>::of(&QNetworkReply::error),[&](QNetworkReply::NetworkError code)
    {
        switch(static_cast<int>(code))
        {
            case QNetworkReply::ConnectionRefusedError:
                qDebug() << "远程服务器拒绝连接(服务器不接受请求)";
                break;
            case QNetworkReply::HostNotFoundError:
                qDebug() << "找不到远程主机名(无效的主机名)";
                break;
            case QNetworkReply::TimeoutError:
                qDebug() << "与远程服务器的连接超时";
                break;
            default:
                break;
        }
    });

    QEventLoop eventLoop2;
    connect(reply_, &QNetworkReply::finished, &eventLoop2, &QEventLoop::quit);
    eventLoop2.exec(QEventLoop::ExcludeUserInputEvents);

    data = reply_->readAll();
    reply_->deleteLater();
}

 QByteArray data得到的数据就是网页的源代码,也就是右键网页“查看源代码”出来的这些内容:

接下来就是从这些内容中解析出图片地址,用到了正则表达式

查看源代码发现这个网页的图片地址都是以 http://pic.k73.com/up/soft开头的那么正则表达式可以写成这样:

http://pic.k73.com/up/soft/.+\.(png|jpg)

以http://pic.k73.com/up/soft开头,匹配任意字符至少一次并且以.png或.jpg结尾

使用https://blog.csdn.net/kenfan1647/article/details/109429187里的工具验证这个正则表达式可以匹配到此网站的图片地址:

匹配图片地址的代码:

void Dialog::handleData(QByteArray & data)
{
    QString str = QString(data);
    qDebug()<<endl<<endl<<endl<<str;

    QRegExp exp("http://pic.k73.com/up/soft/.+\.(png|jpg)");
    exp.setMinimal(false);

    QStringList list = str.split("\n");
    urlList.clear();

    for (int i = 0;i < list.size();++i)
    {
        int pos = 0;
        while ((pos = exp.indexIn(list.at(i) , pos)) != -1)
        {
            pos += exp.matchedLength();
            qDebug() << "pos :" << pos;
            qDebug() << exp.cap(0);
            urlList << exp.cap(0);
        }
    }
}

将匹配出来的图片地址保存起来

最后是下载和保存图片的代码:

void Dialog::on_btnHandle_clicked()
{
    QRegExp exp("[^/]+\.(png|jpg)$");
    exp.setMinimal(false);

    int handleNumber = 0;
    foreach (auto url, urlList)
    {
        int pos = 0;
        QString fileName;
        while ((pos = exp.indexIn(url , pos)) != -1)
        {
            pos += exp.matchedLength();
            fileName = exp.cap(0);
        }

        QByteArray data;
        getHttpData(url,data);
        QPixmap pixmap;
        pixmap.loadFromData(data);
        pixmap.save(fileName);

        ++handleNumber;
    }
}

这里希望下载图片的保存的名称用图片地址的后缀名储存,匹配图片网址后缀的正则表达式:

[^/]+\.(png|jpg)$

这个正则表达式的意思是:从后面开始匹配,匹配以.png或.jpg结尾的内容,然后向前匹配除了/之外的任意字符至少一次

验证一下:

 最终结果:成功下载了网页的图片

另外注意一点,如果程序提示:qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed ,解决办法是去QtCreator的安装目录,搜索ssleay32.dll和libeay32.dll,复制到程序运行目录

  • 5
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip 一个Qt开发的可以替代爬虫的网页数据采集软件,它最重要的特点就是,降低了采集网页数据的门槛,由至少必须掌握一门编程语言降低到只要会操作电脑即可.zip
Qt中进行网络编程,主要涉及到的头文件有**<QTcpSocket>和<QTcpServer>**。以下是一些关于Qt网络编程的信息: 1. **客户端编程**: - **创建QTcpSocket对象**:用于建立与服务器的连接。 - **连接至服务器**:使用`connectToHost()`函数连接到指定的服务器。 - **发送数据**:通过`write()`函数来发送数据到服务器。 - **读取数据**:使用`readAll()`函数来接收来自服务器的数据。 - **断开连接**:完成数据传输后,需要断开与服务器的连接。 2. **服务器端编程**: - **创建QTcpServer对象**:用于监听客户端的连接请求。 - **绑定本地信息**:通过调用`listen()`函数并指定地址和端口来开始监听。 - **等待客户端连接**:当有新的连接请求时,`newConnection()`信号会被触发。 - **读取和发送数据**:与客户端类似,服务器也需要读取和发送数据。 - **断开连接**:结束客户端的连接。 3. **头文件引入**: - 对于客户端,需要包含`#include <QTcpSocket>`。 - 对于服务器,需要包含`#include <QTcpServer>`。 4. **项目文件配置**: - 在项目的`.pro`文件中,需要添加`QT += network`以启用网络模块。 5. **数据流操作**: - 在进行数据收发时,可以使用`QDataStream`类来处理数据流,它提供了一种方便的方式来序列化和反序列化数据。 综上所述,这些是Qt网络编程的基本概念和步骤。在实际开发中,还需要考虑到错误处理、多线程管理以及安全性等问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值