Qt学习笔记-web图片爬取器(webKit)Qt5.6以下的版本才有
生活随笔
收集整理的這篇文章主要介紹了
Qt学习笔记-web图片爬取器(webKit)Qt5.6以下的版本才有
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在上實例和源碼前,說下有個東西:
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
這種方式就,程序運行后,進入指定的網(wǎng)頁,構造指定的css探測器,就可以爬圖片了!
本文章例子為:
http://www.qqjay.com/html/old8/211225.html
程序運行截圖如下:
此時就有下載的文件了:
程序代碼如下:
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(); //停止事件循環(huán),不往下執(zhí)行,等待quit //等待下載完成,我草,我以前都是用計時器。QByteArray data=reply->readAll();QImage image=QImage::fromData(data);return image; }總結
以上是生活随笔為你收集整理的Qt学习笔记-web图片爬取器(webKit)Qt5.6以下的版本才有的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java工作笔记-AJAX实现整体不变,
- 下一篇: Qt工作笔记-依赖于QAbstractT