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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Qt实现简易爬虫

發布時間:2023/12/10 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt实现简易爬虫 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在準備復試的過程中要查詢學校導師的信息,一個一個看,然后分析,有點費事,所以想爬蟲爬去老師的所有信息,然后用以前寫的分析工具(云標簽的那個)進行分析。

本項目由兩部分組成,
1、提取相關的網頁html信息。
2、利用正則表達式提取有用信息

這兩部分都比較簡單,就不詳述了。

直接上代碼:

#include "spider.h" #include "ui_spider.h"#include <QURL> #include <QNetworkReply> #include <QFile> #include <QRegExp> #include <QDebug>Spider::Spider(QWidget *parent) :QWidget(parent),ui(new Ui::Spider) {ui->setupUi(this);manager = new QNetworkAccessManager(this);connect(manager,&QNetworkAccessManager::finished,this,&Spider::ReplyFinishedSlot);}Spider::~Spider() {delete ui; }//利用正則表達式獲取有用信息 void Spider::GetUsefulData() {if(ori_data.isEmpty() == false){QRegExp re_beg(tr("計算機科學與工程學院")); //開始匹配標志QRegExp re_end(tr("信息與軟件工程學院")); //結束匹配標志int index_beg = ori_data.indexOf(re_beg,0); //開始匹配位置int index_end = ori_data.indexOf(re_end,index_beg); //結束匹配位置QRegularExpression re("<a href='TutorDetails.aspx.*id=(\\d{4}).*\\s.*;(.*)</a>"); //正則表達式:匹配模式//QRegularExpression re("<a href='TutorDetails.aspx\?id=(\\d{4}).*\\s.*;(.*)</a>");QRegularExpressionMatch match;while(index_beg<index_end-500) //去除最后一個元素{match = re.match(ori_data,index_beg);if(match.hasMatch()){QString name = match.captured(2); //匹配第二個元素QString html = match.captured(1); //匹配第一個元素QString show = "Name:"+name+" html:"+html+"\n";ui->textBrowser->append(show);index_beg = match.capturedEnd(); //記錄目前匹配的位置}}} }//網絡信息接受完畢 void Spider::ReplyFinishedSlot(QNetworkReply *reply) {ori_data = reply->readAll(); //讀取網頁的Html信息//寫入到文件中 // QFile out_file("test.html"); // if(out_file.open(QIODevice::WriteOnly)) // { // QTextStream out(&out_file); // out<<ori_data; // }//從源碼中獲取所需信息(利用正則表達式)GetUsefulData();reply->deleteLater(); }void Spider::on_OK_pushButton_clicked() {QString url_str = ui->URL_lineEdit->text();if(!url_str.isEmpty()){QUrl url(url_str);manager->get(QNetworkRequest(url)); //提交網絡get請求,這里是 直接下載html源碼}}

這里有個小問題:在正則表達式的時候,如何匹配一個問號(?),因為在正則中?有特殊含義(代表了懶惰匹配)。按理應該加回車 '?'來進行匹配,這個我在在線正則測試中是可以的,但不知為甚在Qt中就不行了?

還有,最終還沒把項目完成,復試就開始了,哎,最后還是一個一個 手動分析的。o(╯□╰)。

項目的源碼在這兒。

總結

以上是生活随笔為你收集整理的Qt实现简易爬虫的全部內容,希望文章能夠幫你解決所遇到的問題。

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