新华字典数据获取方法2
这种方法是使用C++来进行获取的。
主要原理:新华字典网站数据采集,使用Qt的网络模块进行处理。
准备:
网站:http://xh.5156edu.com/pinyi.html
工具:Qt5.4.1
核心部分源码:
1 bool QMyNetwork::GetHtmlContent1(const QString &fHtmlUrl) 2 { 3 4 #ifdef _DEBUG 5 qDebug() << "Start::GetHtmlContent1 >> " << QTime::currentTime().toString("HH:mm:ss:zzz"); 6 #endif //_DEBUG 7 8 QNetworkAccessManager *lpManager = new QNetworkAccessManager(this); 9 QNetworkReply *lpReply = lpManager->get(QNetworkRequest(QUrl(fHtmlUrl))); 10 QEventLoop _Loop; 11 connect(lpManager, SIGNAL(finished(QNetworkReply*)), &_Loop, SLOT(quit())); 12 _Loop.exec(); //block until finish 13 14 /////////////////////TESTING START///////////////////////////////////////////// 15 16 // QByteArray l_test_1 = lpReply->readAll(); 17 18 /////////////////////TESTING END/////////////////////////////////////////////// 19 20 mHtmlContent1 = QString::fromLocal8Bit(lpReply->readAll()); 21 if (mHtmlContent1.size() == 0) return false; 22 23 // this->PrintfContent1(); 24 25 #ifdef _DEBUG 26 qDebug() << "End::GetHtmlContent1 >> " << QTime::currentTime().toString("HH:mm:ss:zzz"); 27 #endif //_DEBUG 28 29 return true; 30 }
剩下的部分基本是对字符串的处理,有人会有疑问,C++字符串处理能力强吗,以前我不敢肯定,现在我确信强,因为Qt里面引用了QRegExp模块,正则一出谁与争锋的感觉就是这样。
感兴趣的可以看看新华字典的获取源码,这里,提供下载完整源码。
*注:看似字符串处理繁琐,但是熟练之后却也是一番收获,因为字符串处理是程序中必要的一个环节。
煮酒论英雄