爬虫的另一种思路 -- 从 robots.txt 中找到抓取入口
近两年出现曾报道一些关于非法抓取数据的程序员被告上法庭的事例, 而非法抓取的一个典型做法就是不遵守网站的 robots.txt
规则进行爬取. 早年就曾有搜索引擎不遵守淘宝的 robots.txt
还去收录网站的信息被告的案例.
在 Scrapy
中的 settings.py
中默认是遵守 robots.txt
的, 一般我们也不会去关闭.
禁止示例
今天在做收集新闻数据爬虫的时候便碰到被 robots.txt
禁止的情况. 笔者在拿到网站 json 数据接口准备测试的时候, 发现网站的响应内容为空, 而浏览器仍可正常访问.
再看回终端的输出, 才发现被禁止访问了, 正是由 robots.txt
禁止的
那么, robots.txt
里面说了什么?打开浏览器访问会看到下面的内容.
第一行 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
是不允许的, 收录或爬虫均违法. 而笔者最开始爬的网址正中不允许的范围.
另辟蹊径
作为守法的好公民, 虽然是带着镣铐在跳舞, 但是仍有我们发挥的余地. 可以看到该网站允许访问的网址还是不少, 甚至笔者还发现了一个在网站首页没有的入口:
按标签筛选 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.
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
java 读取音频/视频 文件时长
java 读取音频/视频 文件时长 支持mp3,mp4,mov,m4a,wav 格式文件 源码 https://github.com/opensourceteams/java-maven-project pom.xml <!-- mp3文件支持(如语音时长)--> <dependency> <groupId>org</groupId> <artifactId>jaudiotagger</artifactId> <version>2.0.1</version> </dependency> <!-- mp4文件支持(如语音时长)--> <dependency> <groupId>com.googlecode.mp4parser</groupId> <artifactId>isoparser</artifactId> <version>1.1.22</version> </depend...
- 下一篇
JS动态加载以及JavaScript void(0)的爬虫解决方案
Intro 对于使用JS动态加载, 或者将下一页地址隐藏为JavaScript void(0)的网站, 如何爬取我们要的信息呢? 本文以Chrome浏览器为工具, 36Kr为示例网站, 使用 Json Handle 作为辅助信息解析工具, 演示如何抓取此类网站. Detail Step 1. 按下 F12 或右键检查进入开发者工具 Step 2. 选中Network一栏, 筛选XHR请求 XHR 即 XMLHttpRequest , 可以异步或同步返回服务器响应的请求, 并且能够以文本或者一个 DOM 文档的形式返回内容. JSON是一种与XML在格式上很像, 但是占用空间更小的数据交换格式, 全程是 JavaScript Object Notation, 本文中的36Kr动态加载时获取到的信息就是JSON类型的数据. 网站为了节省空间, 加快响应, 常常没有对 JSON 进行格式化, 导致 JSON 的可读性差, 难以寻找我们要的信息. 我们通过右键打开获取到的 XHR 请求, 然后看看数据是怎样的 使用 Json Handle 后的数据可读性就很高了 Step 3. 分析 URL ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群