1. 程式人生 > >最近有些無聊寫了一個抓取github的ss賬號的東西

最近有些無聊寫了一個抓取github的ss賬號的東西

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如何操作,就直接寫了文字。

原始碼下載