我需要通过指定搜索查询来搜索搜索引擎结果:" firstName lastName linkedin"。目的是提取linkedin配置文件URL。通常,这是第一个搜索结果。
我使用了一个简单的nodeJs库和一个递归实现(如下所示)来抓取近1500个名字。另外,为了测试搜索引擎限制,我运行了4个并行实例,每个实例分别指向google,bing,yahoo和duckduckgo:
const sec = require('search-engine-client');
const search = (i) => {
if (i < queries.length) {
sec.google(queries[i]).then(function(result) {
console.log(i + " yahoo: " + result.links[0]);
search(i + 1);
}).catch((e) => console.log(e));
}
};
我看过许多帖子说谷歌和其他人对网络抓取器的容忍度非常低,但我设法在所有4个搜索引擎上成功运行这个,接近1500个搜索查询。没有代理,用户代理交换或IP更改。这里发生了什么?
答案 0 :(得分:1)
这很简单。您正在使用一个npm库,它将搜索引擎包装到一个公共客户端供您使用。
该公共客户端的一部分是一组预先填充可接受信息(例如用户代理字符串)的默认值,以便搜索引擎不会快速将您标记为恶意。
https://gitlab.com/autokent/search-engine-client/blob/master/lib/defaults.js
它也可以做一些简单的事情,例如在每个请求之间设置一个短暂的(默认1秒)超时,这样搜索引擎就不会触发速率限制等等。
它可能不是万无一失的,但至少适用于低容量搜索(是的,1500对于大多数搜索引擎来说都是相当低的音量)。