1

事情是:我有一个网络爬虫框架,以及实现这个框架的独立模块。所有这些模块都从特定新闻网站捕获新闻。

在框架中有 2 个不可预知的错误,它们是:IOException 和 SocketTimeoutException。出于显而易见的原因(网站可能处于离线状态和/或正在维护中)

事情是:在一个特定的网站(这个)中,我总是得到随机的 IOExceptions。我尝试预测它,但我仍然不知道为什么会出现此错误。

我认为这是在测试阶段用请求轰炸它。不是,因为在 2 或 3 天内没有发送另一份申请,它仍然会向我抛出错误。

简而言之:该站点不需要身份验证,它会随机抛出 403. RANDOMLY

由于 403 可能是多个不同的错误,我想看看我的应用程序的具体问题是什么。

如果我能得到 which 403 it i,我可以尝试解决它。(403.1, 403.2, ..., 403.n)

//If you guys want the code, it's a basic Jsoup get. 
//(I have also tried it with native API, 
//and still get the same random 403 errors)

//Note that I also tried it with no redirection, and still get the error
Document doc = Jsoup
    .connect("http://www.agoramt.com.br/")
    .timeout(60000)
    .followRedirects(true)
    .get();

//You may criticize about the code. But this specific line is the one 
//that throws the error. And it doesn't randomly do that to other 3k
//site connections. That's why I want to get the specifics from the 403
4

7 回答 7

3

服务器可能会一时兴起返回 403。除了尊重服务器不让您进入的意愿外,您不应最终解决此问题。您可以尝试阅读响应正文以获取服务器提供的详细信息,但这可能就是您所得到的全部。我相信,您正在寻找的 403.n错误代码是IIS特有的功能,您指出的站点似乎与nginx一起服务,所以不要指望得到这些。

如果您的网络爬虫随机获取 403,但常规网络浏览器(来自同一 IP)从未获取 403,那么我建议您最好让网络爬虫请求标头看起来与常规网络浏览器发送的完全一样。对于礼貌的网络爬虫来说,这是否是正确的行为是一个不同的讨论。

于 2012-06-18T12:28:15.247 回答
1

在设计网络爬虫时,应考虑意外中断和错误代码。

保留上次失败的站点队列,以便在一段时间后,网络爬虫可以重试请求。

于 2012-06-23T20:41:44.053 回答
0

借助其他人所说的话,您的爬虫是否有可能被识别并视为网络扫描仪或渗透工具?

于 2012-06-23T21:02:50.710 回答
0

这可能是该站点的互联网连接有问题,它可能有代码试图阻止蜘蛛。途中可能有一个奇怪的代理服务器。

于 2012-06-19T02:26:31.023 回答
0

问题可能是,您可以访问一个文件夹,您的程序想要读取站点上的所有文件,但网络服务器给出了 403 错误,并且可能会终止套接字。这就是我的想法,没有代码,我无法判断它是程序错误或只是网络服务器的配置。

于 2012-06-15T14:20:56.413 回答
0

也许尝试将 index.php 添加到末尾(或者该站点的主主页是什么...... index.html 等......)

但是,我不确定这是否有助于解决您的问题。我使用我在某处找到的 Connection 类,它基本上说就像上面的帖子之一所说(模拟 Web 浏览器的标题,所以说......它看起来像是来自 FireFox,而不是 java 默认值是)。

我想这值得一试。

于 2012-06-23T16:25:39.247 回答
0

我不知道 Jsoup 是什么,但我建议您阅读HttpURLConnection.getErrorStream()。此方法将允许您阅读错误文档。在连接失败后也应该可以访问错误文档的标题字段,就像您通常访问标题字段的方式一样。这两者(正文和标题)一起将为您提供服务器提供的所有信息。

于 2012-06-24T13:51:21.123 回答