当我尝试从Linkedin下载一页时,使用以下命令:
curl -I https://www.linkedin.com/company/google
我收到 999状态代码:
HTTP/1.1 200 Connection established
HTTP/1.1 999 Request denied
Date: Tue, 30 Aug 2016 08:19:35 GMT
X-Li-Pop: prod-tln1-hybla
Content-Length: 1629
Content-Type: text/html
由于使用浏览器的用户可以访问Linkedin页面,这意味着他们可以在机器人和用户之间产生差异。
由于robots.txt末尾有以下几行,其他用户将无法访问Linkedin页面:
User-agent: *
Disallow: /
因此,Linkedin可以区分来自浏览器和其他人的请求。 他们是如何做到的?
答案 0 :(得分:-1)
对于您提交的特定情况,可能是因为您未指定您的用户代理。
当您提出请求时,它会向您的网站发送标题,例如用户代理,屏幕分辨率,Cookie,语言,编码等
如果没有此信息,服务器可以拒绝连接......
要在连接到网站时检查特定网站在任何现代浏览器中检查网络标签的标题。
linkedin所做的另一件事是检查某个ip,如果它在请求网页时,也会对其他元素发出ajax请求。由于大多数抓取工具无法解释javascript,因此无法识别是否由浏览器或潜在机器人发出请求。
之后就是用户行为了。访问无法直接访问的页面,仅通过导航,识别登录的ip /帐户的模式行为,甚至检查用户的网络。更大的帐户网络,用户不太可能使用该帐户进行抓取。
PS。即使你设法避免所有机制,这也是一个真正非常真的糟糕的想法来刮掉你的