最近应部门的需求,要在所有的网站中写一个能收集爬虫数据的工具,希望能通过此工具了解网站的状态,是否有搜索引擎进站收录站点的信息。所以应这个需求开始摸索这个工具所涉及的相关信息,网上的相关信息有很多,但大部分是重复的,也是旧信息不知复制这些信息的人有没有真正的去实践过其的真实效果。
经过不断摸索得出以下结论,要写这个工具必需由 JS(脚本)和后端语言的配合,如果只使用后端语言则不是所以站点都适合,毕竟不同站点采用的后端语言也不同,达不到通用的目的;那么采用 JS(脚本)和后端语言的方式就能,脚本用作先行兵去探路,了解前方状况,后端语言作后勤支持,将收集收的数据录入保存起来,加以分析最后得出结果。
JS(先行兵)
;!function (win, doc) {
……
let list_label = ['spider', 'bot', 'slurp'];
let user_agent = navigator.userAgent.toLowerCase();
for (let string of list_label) {
if (user_agent.indexOf(string) > 0) {
// 转为小写
let referrer = doc.referrer.toLowerCase();
post({
referrer, user_agent,
pageTitle: doc.getElementsByTagName('title')[0].innerHTML,
pageUrl: encodeURI(win.location.href),
hostName: win.location.hostname
});
break;
}
}
……
}(window, document);
这先行兵是非常重要的一步,之于后面的数据怎么去处理就看自己的发挥了。
反侦查真与假
收集一部分数据后分析发现进来的数据有很多虫,这下产生了怀疑真的有这么受欢迎吗?于是继续找资料发现了假爬虫,有很多伪装成主流搜索引擎的爬虫来此,尤其是像百度。
如何分辨真伪于是呼找到了通过反侦查的方式,也就是【ip反查域名】。方式有两种,一种通过命令,另一种通过现成的工具。
现成的工具
- http://www.ip-adress.com/reverse_ip
- http://www.7c.com/
操作系统命令的方式
Linux:
host *.*.*.*
centos 7.4 环境下会出现
-bash: host: command not found
解决方法通过安装 bind-utils 即可:
yum install bind-utils
Windows:
nslookup *.*.*.*
但以上的方法其实都是通过工具来手动查,数据少的情况还可以应付,数据多的情况下就不适合,难道就没有通过接口,或者是其他以程序方式自动去解决,于是呼找到 nodeJs 中有个依赖库名 dns ,它能帮助解决这个问题。
const dns = require('dns');
dns.reverse('116.179.37.164', (err, addresses) => {
if (err) {
console.log('err', err);
} else {
var json_str = JSON.stringify(addresses);
console.log(`addresses: ${json_str}`);
if (json_str.indexOf('baidu.com')) {
}
}
});
转载请注明:隨習筆記 » 编写收集爬虫数据的工具