爬虫的另一种思路 -- robots.txt

5530017-a653709cbf8c9b9d.png
封面

近两年出现曾报道一些关于非法抓取数据的程序员被告上法庭的事例, 而非法抓取的一个典型做法就是不遵守网站的 robots.txt 规则进行爬取. 早年就曾有搜索引擎不遵守淘宝的 robots.txt 还去收录网站的信息被告的案例.

Scrapy 中的 settings.py 中默认是遵守 robots.txt 的, 一般我们也不会去关闭.

5530017-1f13b414a0e96f80.png
settings.py

禁止示例

今天在做收集新闻数据爬虫的时候便碰到被 robots.txt 禁止的情况. 笔者在拿到网站 json 数据接口准备测试的时候, 发现网站的响应内容为空, 而浏览器仍可正常访问.

5530017-53a5f2b23f85cc8b.png
浏览器打开

再看回终端的输出, 才发现被禁止访问了, 正是由 robots.txt 禁止的

5530017-348a33bdf0d3e2e4.png
image.png

那么, robots.txt 里面说了什么?打开浏览器访问会看到下面的内容.

5530017-df823429fc25d639.png
image.png

第一行 User-Agent 用户代理是说明访问人身份的, 如果 用户代理 的名称为 MJ12bot 的会直接禁止访问全站内容.

不信? 将settings.py 中的用户代理设置为下面的 USER_AGENT = 'MJ12bot', 然后scrapy shell 访问 https://www.jiemodui.com/, 看看是不是收到DEBUG: Forbidden by robots.txt: <GET https://www.jiemodui.com/> 的信息?

换成其他名字便又可以正常访问了, 可见网站并不是禁止所有爬虫, 禁止搜索引擎收录的.其他的用户代理可以正常访问 ALLOW 对应的 url 前缀下的网页. 但是Disallow 下的 url 是不允许的, 收录或爬虫均违法. 而笔者最开始爬的网址正中不允许的范围.

5530017-3e26a3344d0a1a52.png
image.png

另辟蹊径

作为守法的好公民, 虽然是带着镣铐在跳舞, 但是仍有我们发挥的余地. 可以看到该网站允许访问的网址还是不少, 甚至笔者还发现了一个在网站首页没有的入口:

 按标签筛选 https://www.jiemodui.com/T
 按作者筛选 https://www.jiemodui.com/W
 按公司筛选 https://www.jiemodui.com/O

如此, 笔者的爬取需求已经得到满足, 同时还遵守了 robots.txt. 有同学会问, 如果网址不在 robots.txt 中怎么办? 我认为私下自己使用就好, 不在里面的网址搜索引擎一般也不会去收录. 比如笔者在后面分析数据源的时候还发现了带有 /api/ 的网址, 我们平时搜索的时候应该还没搜出来过打开是 json 数据的结果吧.

总结

如果平时我们遇到了浏览器能访问, 但自己的爬虫被禁止的情况, 应该注意查看输出是否是因为 robots.txt 而被禁止.
如果是, 要认真分析 robots.txt 的每一个允许的网址有没有自己需要的接口; 如果没有自己要的接口, 再用浏览器的开发者工具查看有没有隐藏的数据接口. 如果真的没有, 选择不遵守 robots.txt 时要慎重, 出于自己学习的目的私下使用可能不是什么大事, 但是公开或者商业使用就有可能要吃官司了.


新闻数据源项目地址: https://github.com/FesonX/finvest-spider
欢迎 star , 有好的新闻源欢迎 pull request, 有问题欢迎 issue.

微信公众号: 程序员的碎碎念

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值