您的位置:首页 > 编程语言

最近有些无聊写了一个抓取github的ss账号的东西

2017-04-20 10:06 281 查看
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如何操作,就直接写了文本。

源码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐