私は単純な Web スパイダーを書いています。アイデアは、QNetworkAccessManager、QNetworkReply、および QNetworkRequest を使用してプログラムでページを取得することであり、すべて正常に動作します。
私が遭遇する問題は、(一部のページでは) プログラムによって、またはブラウザーで「手動で」ページにアクセスすることによって、異なる/一致しない結果が得られることです。私は常に構文的に正しい HTML ページを取得しますが、それらはある種の「スパイダー保護」の回答のように見えます。私が参照しているページは POST ページではありません。私が行っているテストは、非常に単純な URL ページを使用しており、パラメーター (例: www.sample.com/index.php?param=something) を使用する場合もあれば、プレーン ページを使用する場合もあります。 .html URL。
擬似コードは次のとおりです。
QNetworkRequest req;
req.setUrl(QUrl(myurl));
req.setRawHeader(*I did try this one with no success*);
QNetworkAccessManager man;
QNetworkReply rep = man->get(req);
//finish and error slots connection code here
. . .
void replyFinished()
{
QNetworkReply* rep = qobject_cast<QNetworkReply *>(sender());
if (rep->error() == QNetworkReply::NoError)
{
// read data from QNetworkReply here
QByteArray bytes = rep->readAll();
QString stringa(bytes);
qDebug() << stringa;
}
}
finish() スロットでは、networkreply からのデータを出力しています。URL に手動でアクセスして取得したブラウザーでの単純な「ソースの表示」操作から、一致しない結果が得られることがあります。
カスタムの「見つかりません」ページが表示されることもあれば、ログインフォームやその他の予期しないコンテンツを含む奇妙なページが表示されることもあります。多分それはある種のスパイダー保護ですか?誰でも助けることができますか?