最近有些無聊寫了一個抓取github的ss賬號的東西
阿新 • • 發佈:2019-02-02
github是https型別的直接去load網址 程式就死了。獲取不到相關的東西。
然後 我就大概在網上搜了關於Qt訪問https的東西,帖子到時很多,都只是說了大概怎麼用。於是就自己照著寫了寫,本人菜鳥一枚。
主要程式碼如下:
void Widget::on_pushButton_clicked() { const QString strUrl = "https://github.com/Alvin9999/new-pac/wiki/ss%E5%85%8D%E8%B4%B9%E8%B4%A6%E5%8F%B7"; QNetworkAccessManager mManager; QNetworkRequest request; request.setUrl(QUrl(strUrl));//載入網頁 QSslConfiguration config; config.setPeerVerifyMode(QSslSocket::VerifyNone); config.setProtocol(QSsl::TlsV1SslV3);//設定ssl request.setSslConfiguration(config); QNetworkReply *reply = mManager.get(request); QByteArray data; QEventLoop loop;//啟動迴圈 connect(reply, SIGNAL(finished()),&loop,SLOT(quit()));//讀取完成後退出迴圈 loop.exec(); data = reply->readAll();//接收原始碼 // qDebug()<<QString(data); QWebPage UrlPage; UrlPage.mainFrame()->setHtml(QString(data)); QWebFrame *UrlFrame = UrlPage.currentFrame(); QWebElement doc = UrlFrame->documentElement(); //id="user-content-ss-or-ssr免費賬號長期更新" QWebElement ID = doc.findFirst("#wiki-body");//ID = 過濾節點 QWebElementCollection tmp = ID.findAll("p"); //html不熟,下面的用字串處理 QStringList strList; for(int i=0;i<tmp.count();i++) { // qDebug()<<i<<" "<<tmp.at(i).toPlainText(); bool ok = tmp.at(i).toPlainText().startsWith("伺服器"); if(ok) { strList<<tmp.at(i).toPlainText(); } } QString strData; for(int i = 0; i<strList.count();i++) { strData+= strList.at(i)+"\n"; }//伺服器 各項提取可以用mid json不熟暫時不謝json,直接寫文字了。 writeFile(strData); }
html的doc節點讀取還不是很熟練後面就用QString處理了。在後面的提取 用mid配合QStringList就可以提取 或者用正則直接匹配出來。
寫檔案的程式碼:
void Widget::writeFile(QString data) { QString Path = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); QString configname = "ss.txt"; QString FilePath = Path+"/"+configname; QFile file(FilePath); bool ok = file.open(QIODevice::WriteOnly | QIODevice::Text); if(!ok) { QMessageBox::information(this,"Error","File OPen faild!"); return; } QTextStream out(&file); out<<data.toUtf8()<<endl; file.close(); ui->pushButton->setText("已輸出"); connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(close())); }
本意是要寫json的,,還不熟悉json如何操作,就直接寫了文字。