3

好吧,我被要求监视大约 10-20 个站点的任何更改。
我一直在尝试获取这些站点的标题信息并使用此方法检查它们的最后更新时间。

url = new URL( "http://www.wikipedia.org/" );
HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection();
System.out.println( "Connection established" );
httpConnection.setRequestMethod( "HEAD" );
httpConnection.connect();
long lastModified = httpConnection.getLastModified();
if( lastModified != 0 ) {
    System.out.println( new Date( lastModified ) );
} else {
    System.out.println( "Last-Modified not returned" );
}
httpConnection.disconnect();`

但是这种方法的问题是一些站点(很多)没有放置完整的标题信息。我还想知道这是向服务器发出头部请求的正确方法还是我错过了什么???

还有其他方法可以监控网站吗?
我一直在将整个站点转换为 md5 值,然后监视站点,但是这种方法太敏感了,即使是最小的更改也会通知我。

4

1 回答 1

1

如果服务器没有提供准确的最后修改标题,则由您来计算站点何时更改。您将不得不在一段时间内不断检索网页并自己检查更改。md5 总和确实对即使是最小的变化也很敏感——也许你可以找出一个对变化不太敏感的替代方案。也许该网站使用 HTML 表格来显示投标发布,您可以计算表格的行数。

也许您可以做一些涉及右上角的“单击此处以获取有关新投标发布的通知”的操作?:)

注意:如果您正在获取完整 Web 响应的 md5 总和,则您也可能是 md5'ing 标头数据,这很可能会发生变化。或许如果你把不带header数据的html的md5总和,你可以准确的监控到页面何时发生变化。只是一个建议-如果您有报酬,我不想为您解决任务:)

附加说明:我看到您有自己的代码来请求网页 - 我觉得我必须建议您使用许多现有的java 网络爬虫库中的任何一个。代码可能会变得更可靠,更容易使用。

于 2013-02-28T10:11:58.080 回答