我需要一些建议,为这个项目,我正在工作。
我目前正在做一个请求头部的项目;下面是一个抓取的头部的例子,采用Mongo文档样式:
{
"url": "google.com",
"statusCode": 301,
"headers": {
"location": "http://www.google.com/",
"content-type": "text/html; charset=UTF-8",
"date": "Mon, 25 Mar 2013 13:50:31 GMT",
"expires": "Wed, 24 Apr 2013 13:50:31 GMT",
"cache-control": "public, max-age=2592000",
"server": "gws",
"content-length": "219",
"x-xss-protection": "1; mode=block",
"x-frame-options": "SAMEORIGIN"
}
}该项目使用Node.JS、Javascript和MongoDB。目前,我在MongoDB中存储了几千个这样的响应,我对在headers中使用一些items来检测平台更改很感兴趣。在我看来,像server、x-powered-by、x-aspnet-version这样的头都可以用来在将来进行交叉引用。例如,如果一个网站"today“在两个月后再次运行这个抓取器时,从Microsoft-IIS/7.0升级到了Microsoft-IIS/7.5,那么有理由相信这个网站已经升级了。
我的问题是--最好的方法是什么?
我是否应该创建两个集合- collectionToday和collectionInTwoMonths
然后对每个server、x-powered-by和x-aspnet-version的整数变化/增量执行正则表达式搜索?
这个实现将如何工作?
任何建议都将不胜感激。
发布于 2013-03-25 23:14:03
有几种方法可以做到这一点。一种方法是,按照您的建议,为每个时间段创建不同的集合,并为每个时间段存储整个标头组。然后,您可以通过为每个时间段的url运行find来查询差异,比较结果应用程序端,并报告结果。
另一种方法是存储" differences“集合,该集合为每个时间点保存当时的标头和上次查询的标头之间的差异。这将在每次查询标头时需要更多的应用程序逻辑,但在实际查询差异时会减少工作。这就是我会做的。
编辑
如果这是您需要的三个头文件,那么我认为这听起来不错。请记住,当您查询以找出差异时,您需要找到每个头最后一次更改以进行比较的时间,这意味着集合中的最后一个条目(按时间)既对应于正确的url,又有一个对应于有问题的头的条目。
Psuedo-用于区分的代码:
for every url you want:
query collection by url, sorting by date
for each header:
find the last document with that field
if the header value in that document and the current header are different:
add the field to the new document
add the new document, holding the url, date, and all different fields, to the collectionhttps://stackoverflow.com/questions/15616797
复制相似问题