日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt学习笔记-web图片爬取器(webKit)Qt5.6以下的版本才有

發布時間:2025/3/15 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt学习笔记-web图片爬取器(webKit)Qt5.6以下的版本才有 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在上實例和源碼前,說下有個東西:
css探測器:
如下圖:

拷貝的代碼如下:
body > div.wrap > div:nth-child(5) > div:nth-child(1) > div.tupian > p:nth-child(3) > img
這里去掉:就是那一組圖片(所有子元素),如下代碼:
body > div.wrap > div > div > div.tupian > p> img

這種方式就,程序運行后,進入指定的網頁,構造指定的css探測器,就可以爬圖片了!
本文章例子為:
http://www.qqjay.com/html/old8/211225.html

程序運行截圖如下:

此時就有下載的文件了:

程序代碼如下:
widget.h

#ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QImage>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots:void on_btnLoad_clicked();void onProgress(int progress);void onLoadFinished(bool ok);private:QImage downLoadImage(const QString &url);private:Ui::Widget *ui; };#endif // WIDGET_H

main.cpp

#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }

widget.cpp

e <QEventLoop> #include <QUrl> #include <QNetworkAccessManager> #include <QWebElementCollection> #include <QNetworkRequest> #include <QFileInfo> #include <QNetworkReply> #include <QByteArray>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);//webView的設置QWebSettings *settings=ui->webView->settings();settings->setAttribute(QWebSettings::AutoLoadImages,false);settings->setAttribute(QWebSettings::JavascriptEnabled,false);connect(ui->webView,SIGNAL(loadProgress(int)),this,SLOT(onProgress(int)));connect(ui->webView,SIGNAL(loadFinished(bool)),this,SLOT(onLoadFinished(bool))); }Widget::~Widget() {delete ui; }void Widget::on_btnLoad_clicked() {ui->webView->load(QUrl(ui->lineEdit->text())); }void Widget::onProgress(int progress) {QString title=QString::number(progress)+"%";this->setWindowTitle(title); }void Widget::onLoadFinished(bool ok) {qDebug()<<"load finished,"<<ok;QWebElementCollection elements=ui->webView->page()->mainFrame()->findAllElements("body > div.wrap > div > div > div.tupian > p > img");for(int i=0;i<elements.count();i++){const QWebElement &ele=elements.at(i);QString url=ele.attribute("src");QImage image=downLoadImage(ele.attribute("src"));QFileInfo info(url);QString fileName=info.fileName();image.save(fileName);} }QImage Widget::downLoadImage(const QString &url) {QNetworkAccessManager mgr;QNetworkRequest request;request.setUrl(QUrl(url));QNetworkReply *reply=mgr.get(request);QEventLoop loop;connect(reply,SIGNAL(finished()),&loop,SLOT(quit()));loop.exec(); //停止事件循環,不往下執行,等待quit //等待下載完成,我草,我以前都是用計時器。QByteArray data=reply->readAll();QImage image=QImage::fromData(data);return image; }

總結

以上是生活随笔為你收集整理的Qt学习笔记-web图片爬取器(webKit)Qt5.6以下的版本才有的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。