我需要像这样指定一个搜索查询来抓取搜索引擎的结果:"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更改。这是怎么回事?
发布于 2018-01-10 12:59:49
这相当简单。您正在使用一个npm库,它将搜索引擎封装到一个通用客户端中供您使用。
通用客户端的一部分是一组预填充可接受信息(例如,用户代理字符串)的默认值,以便搜索引擎不会很快将您标记为恶意的。
https://gitlab.com/autokent/search-engine-client/blob/master/lib/defaults.js
它还做一些简单的事情,比如在每个请求之间设置一个很短的(默认为1秒)超时,这样搜索引擎就不会触发速率限制,等等。
它可能不是万无一失的,但至少适用于低搜索量的搜索(是的,1500对于大多数搜索引擎来说是相当低的搜索量)。
https://stackoverflow.com/questions/48180263
复制相似问题