我正在写一个简单的网络蜘蛛。 我的想法是使用QNetworkAccessManager,QNetworkReply和QNetworkRequest以编程方式获取页面,一切正常。
我遇到的问题是(对于某些页面)我以编程方式获得不同/不匹配的结果,或者通过浏览器“手动”访问该页面。 我总是得到正确的HTML页面,但他们看起来像某种“蜘蛛保护”的答案。 我所指的页面不是POST页面,我正在做的测试是非常简单的url页面,有时带有参数(例如www.sample.com/index.php?param=something),有时甚至是普通页面.html网址。
伪代码如下:
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()插槽中,我正在从网络中打印数据,有时我通过手动访问URL获得浏览器中简单的“查看源”操作的不匹配结果。
有时我会收到一个自定义的“未找到”页面,有时会出现一些带有登录表单或其他意外内容的奇怪页面。 也许它是某种蜘蛛保护?有人可以帮忙吗?
答案 0 :(得分:0)
保护webspiders有三种主要方法:
就前两个选项而言 - 你应该使用一些tcp / ip嗅探器,如Smart sniff来检查浏览器发送的数据是否与程序发送的数据相同。如果它相等,那意味着你可能会遇到某种javascript障碍。如果是这样,您可能会尝试使用某些支持JavaScript的浏览引擎,例如QWebPage。我不知道它是否在没有连接到任何QWebView时执行它的javascript - 可能隐藏的视图可能是必要的。
如果我发现自己处于需要模拟浏览器某些远程服务的情况,我通常只需编写Firefox-plugin(使用javascript);通常可以消除上述任何问题;)