IT技术博客大学习 共学习 共进步

真假百度蜘蛛的甄别

火丁笔记 2017-02-06 23:09:48 浏览 2,922 次

   虽然百度的口碑并不好,但是不可否认的是,它一直是中文搜索中的霸主,所以对大多数中小型商业公司而言,都对百度蜘蛛的抓取行为予以放行,不过还有很多非法的蜘蛛,它们会通过 User-Agent 把自己伪装成百度蜘蛛,此时如果单纯以 User-Agent 来判断是否是百度蜘蛛就不合适了。虽然网上能找到很多现成的百度蜘蛛 IP 段,但是并不能确认它们的准确性,所以我打算自己收集,进而甄别真假百度蜘蛛。

   

   实际上百度在常见问题解答中给出了甄别的方法:当有 User-Agent 是 Baiduspider 的请求时,我们可以通过 host 命令反解 ip 来判断,Baiduspider 的 hostname 以 *.baidu.com 或 *.baidu.jp 的格式命名,其它的则可以视为非法的蜘蛛。

   注意:有的百度蜘蛛服务器并不遵守此规则,本案例中无视它们。

   为什么百度不主动公布它自己的 IP 段呢?这样大家就方便了啊!答案多半是因为它怕别人封禁它,正所谓君子坦荡荡,小人常戚戚。比如 AWS 就公布了自己的 IP 段。

   下面我们将尝试通过 log 历史数据来找出真正的百度蜘蛛,假设 log 格式如下;

   1.2.3.4 … “Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)”

   简单 shell 即可实现,通过分析我的 log,最终可以拿到几百个百度蜘蛛的 IP:

shell> awk '$0 ~ "Baiduspider" {print $1}' /path/to/log \
    | xargs -n1 -I {} sh -c 'echo -en {} "\t"; host {}' \
    | awk '$NF ~ "\\.baidu\\.(com|jp)\\.$" {print $1}' > baidu

123.125.71.100
123.125.71.101
123.125.71.102
123.125.71.103
123.125.71.104
123.125.71.105
...

   因为结果集太臃肿了,所以我拍脑袋做了一个 24 位的 CIDR 处理:

shell> awk -F. -v OFS=. '{print $1, $2, $3, "0/24"}' baidu | sort -u

119.63.195.0/24
119.63.198.0/24
123.125.66.0/24
123.125.71.0/24
180.76.15.0/24
180.76.5.0/24
220.181.108.0/24

   如此结果集就精简多了,以后再有 User-Agent 是 Baiduspider 的请求进来时,我们只要简单判断一下 IP 是否在 CIDR 结果中即可,是则予以放行。当然,本文中百度蜘蛛的 IP 数据也可以用在别的地方,比如禁止百度访问。 </body></html>

建议继续学习

  1. 读书笔记-壹百度:百度十年千倍的29条法则 (阅读 15,923)
  2. 百度日本-四面楚歌 (阅读 7,863)
  3. 手机产品设计方向 (阅读 7,804)
  4. 在百度的第一年 (阅读 6,764)
  5. php实现百度音乐采集下载 (阅读 5,401)
  6. 百度是如何使用hadoop的 (阅读 5,002)
  7. 整合搜索,阿拉丁,云计算,以及框计算 (阅读 4,743)
  8. 百度的框,请移动一下 (阅读 4,603)
  9. 百度这个公司 (阅读 4,503)
  10. 集中暴创新项目,各大互联网公司都有 (阅读 4,402)