为什么我没有谷歌(和bing)将我的刮刀列入黑名单?

时间:2018-01-10 04:22:15

标签: javascript node.js web-scraping

我需要通过指定搜索查询来搜索搜索引擎结果:" 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更改。这里发生了什么?

1 个答案:

答案 0 :(得分:1)

这很简单。您正在使用一个npm库,它将搜索引擎包装到一个公共客户端供您使用。

该公共客户端的一部分是一组预先填充可接受信息(例如用户代理字符串)的默认值,以便搜索引擎不会快速将您标记为恶意。

https://gitlab.com/autokent/search-engine-client/blob/master/lib/defaults.js

它也可以做一些简单的事情,例如在每个请求之间设置一个短暂的(默认1秒)超时,这样搜索引擎就不会触发速率限制等等。

它可能不是万无一失的,但至少适用于低容量搜索(是的,1500对于大多数搜索引擎来说都是相当低的音量)。