笔记-爬虫-robots.txt
笔记-爬虫-robots.txt
1. robots.txt文件简介
1.1. 是什么
robots.txt是用来告诉搜索引擎网站上哪些内容可以被访问、哪些不能被访问。当搜索引擎访问一个网站的时候,它首先会检查网站是否存在robots.txt,如果有则会根据文件命令访问有权限的文件。
每个网站需要根据自身的要求写好robots.txt文件,以CSDN为例:
访问https://www.csdn.net/robots.txt
User-agent: *
Disallow: /scripts
Disallow: /public
Disallow: /css/
Disallow: /images/
Disallow: /content/
Disallow: /ui/
Disallow: /js/
Disallow: /scripts/
Disallow: /article_preview.html*
Disallow: /tag/
Sitemap: http://www.csdn.net/article/sitemap.txt
1.2. 为什么要这样?
一个网站为什么要写robots.txt,主要有四点:
1、保护网站安全
2、节省流量
3、禁止搜索引擎收录部分页面
4、引导蜘蛛爬网站地图
2. robots.txt的语法
1、定义搜索引擎
User-agent:定义搜索引擎,其中*表示所有,Baiduspider表示百度蜘蛛,Googlebot表示谷歌蜘蛛。
也就是说User-agent:*表示定义所有蜘蛛,User-agent:Baiduspider表示定义百度蜘蛛。
2、禁止与允许访问
Disallow: /表示禁止访问,Allow: /表示允许访问。
在写robots.txt时需特别注意的是,/前面有一个英文状态下的空格(必须是英文状态下的空格)。
3、禁止搜索引擎访问网站中的某几个文件夹,以a、b、c为例,写法分别如下:
Disallow: /a/
Disallow: /b/
Disallow: /c/
3、禁止搜索引擎访问文件夹中的某一类文件,以a文件夹中的js文件为例,写法如下:
Disallow: /a/*.js
4、只允许某个搜索引擎访问,以Baiduspider为例,写法如下:
User-agent: Baiduspider
Disallow:
5、禁止访问网站中的动态页面
User-agent: *
Disallow: /*?*
6、只允许搜索引擎访问某类文件,以htm为例,写法如下:
User-agent: *
Allow: .htm$
Disallow: /
7、禁止某个搜索引擎抓取网站上的所有图片,以Baiduspider为例,写法如下:
User-agent: F
Disallow: .jpg$
Disallow: .jpeg$
Disallow: .gif$
Disallow: .png$
Disallow: .bmp$
3. robots.txt文件存放位置
robots.txt文件存放在网站根目录下,并且文件名所有字母都必须小写。
4. 其它注意事项
写robots.txt文件时语法一定要用对,User-agent、Disallow、Allow、Sitemap这些词都必须是第一个字母大写,后面的字母小写,而且在:后面必须带一个英文字符下的空格。
网站上线之前切记写robots.txt文件禁止蜘蛛访问网站,如果不会写就先了解清楚写法之后再写,以免给网站收录带来不必要的麻烦。
robots.txt文件生效时间在几天至一个月之间,站长自身无法控制。但是,站长可以在百度统计中查看网站robots.txt文件是否生效。
5. python中robots.txt解析
在urllib包中已有robotparse用于解析
5.1. 使用示例
from urllib import robotparser
rp = robotparser.RobotFileParser()
rp.set_url("https://www.csdn.net/robots.txt")
rp.read()
url = "https://www.csdn.net"
user_agent = "ddt"
print(rp.can_fetch(user_agent,url))
5.2. 常用方法
set_url(),用来设置 robots.txt 文件的链接。如果已经在创建
RobotFileParser 对象时传入了链接,那就不需要再使用这个方法设置了。
read(),读取 robots.txt 文件并进行分析,注意这个函数是执行一个读取和分析操作,如果不调用这个方法,接下来的判断都会为 False,所以一定记得调用这个方法,这个方法不会返回任何内容,但是执行了读取操作。
parse(),用来解析 robots.txt 文件,传入的参数是
robots.txt 某些行的内容,它会按照 robots.txt 的语法规则来分析这些内容。
can_fetch(),方法传入两个参数,第一个是
User-agent,第二个是要抓取的 URL,返回的内容是该搜索引擎是否可以抓取这个 URL,返回结果是 True 或 False。
mtime(),返回的是上次抓取和分析
robots.txt 的时间,这个对于长时间分析和抓取的搜索爬虫是很有必要的,你可能需要定期检查来抓取最新的 robots.txt。
modified(),同样的对于长时间分析和抓取的搜索爬虫很有帮助,将当前时间设置为上次抓取和分析 robots.txt 的时间。
from urllib.robotparser import
RobotFileParser
rp=RobotFileParse()
rp.set_url('http://www.jianshu.com/robots.txt')
#也可以直接设置rp=RobotFileParse('http://www.jianshu.com/robots.txt')
re.read()
#也可以这么设置rp.parse(urlopen('http://www.jianshu.com/robots.txt').read().decode('utf-8').splict('\n'))
print(rp.can_fetch('*','http://www.jianshu.com/p/b67554025d7d'))
print(rp.can_fetch('*', "http://www.jianshu.com/search?q=python&page=1&type=collections"))
笔记-爬虫-robots.txt的更多相关文章
- Robots.txt - 禁止爬虫(转)
Robots.txt - 禁止爬虫 robots.txt用于禁止网络爬虫访问网站指定目录.robots.txt的格式采用面向行的语法:空行.注释行(以#打头).规则行.规则行的格式为:Field: v ...
- 从robots.txt開始网页爬虫之旅
做个网页爬虫或搜索引擎(下面统称蜘蛛程序)的各位一定不会陌生,在爬虫或搜索引擎訪问站点的时候查看的第一个文件就是robots.txt了.robots.txt文件告诉蜘蛛程序在server上什么文件是能 ...
- Linux企业级项目实践之网络爬虫(29)——遵守robots.txt
Robots协议(也称为爬虫协议.机器人协议等)的全称是"网络爬虫排除标准"(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以 ...
- 离robots.txt启动网络爬虫之旅
要成为一个网络爬虫或搜索引擎(在这里,共同蜘蛛)它不会陌生,在搜索引擎爬虫的第一个文件或者访问该网站上浏览robots.txt该.robots.txt文件讲述了蜘蛛server哪些文件要观看正在. 当 ...
- 如何设置让网站禁止被爬虫收录?robots.txt
robot.txt只是爬虫禁抓协议,user-agent表示禁止哪个爬虫,disallow告诉爬出那个禁止抓取的目录. 如果爬虫够友好的话,会遵守网站的robot.txt内容. 一个内部业务系统,不想 ...
- Robots.txt - 禁止爬虫
robots.txt用于禁止网络爬虫访问网站指定目录.robots.txt的格式采用面向行的语法:空行.注释行(以#打头).规则行.规则行的格式为:Field: value.常见的规则行:User-A ...
- 爬虫出现Forbidden by robots.txt(转载 https://blog.csdn.net/zzk1995/article/details/51628205)
先说结论,关闭scrapy自带的ROBOTSTXT_OBEY功能,在setting找到这个变量,设置为False即可解决. 使用scrapy爬取淘宝页面的时候,在提交http请求时出现debug信息F ...
- Scrapy 爬虫日志中出现Forbidden by robots.txt
爬取汽车之家数据的时候,日志中一直没有任何报错,开始一直不知道什么原因导致的,后来细细阅读了下日志发现日志提示“Forbidden by robots.txt”,Scrapy 设置文件中如果把ROBO ...
- scrapy爬虫出现Forbidden by robots.txt
scrapy爬虫出现Forbidden by robots.txt
随机推荐
- SSM整合笔记
SSM整合笔记 1,创建maven项目 创建maven项目过程省略 ps:如果创建完maven项目之后项目报错,可能是没有配置Tomcat 2,在pom.xml里面导入相应的jar的依赖 <pr ...
- pta 编程题6 树的同构
其它pta数据结构编程题请参见:pta 题目请参见:树的同构 因题目中左右子树是按照下标给出,因此用数组存放树是更好的方法. 判断两棵树是否同构:用递归的方法.如果当前两个结点都为空,则返回TRUE: ...
- js中(break,continue,return)的区别
break 一般用于跳出整个循环(for,while) continue 跳出本次循环,进入下一次循环 return 只能出现在函数体内,一旦执行return,后面的代码将不会执行,经常用retur ...
- vue安装环境
vue安装环境 1. 安装node.js 先在电脑上安装node.js, https://nodejs.org/en/ 可以点击链接安装. 安装成功后,在命令板里检测是否安装成功, node -v 2 ...
- cf1151 B
题目连接 : https://codeforces.com/contest/1151/problem/B 可能我想法有问题,我怎么感觉B题的思路不直接想出来的,我想了一会才想出来,感觉不难,但可能有更 ...
- 前端安全之XSS和csrf攻击
1.Csrf攻击概念: csrf攻击(Cross-site request forgery):跨站请求伪造; 2.Csrf攻击原理: 用户是网站A的注册用户,且登录进去,于是网站A就给用户下发cook ...
- React后台管理系统-后台接口封装
1新建文件夹 service ,里边建4个文件,分别是statistic-service.jsx 首页数据统计接口, user-service.jsx用户接口, product-service.jsx ...
- js日期类型date
javascript语言核心包括Date()构造函数,用来创建表示日期和时间的函数 //返回当前的日期和时间 var today = new Date(); //2011年1月1日 ...
- Nodejs:Node.js模块机制小结
今天读了<深入浅出Nodejs>的第二章:模块机制.现在做一个简单的小结. 序:模块机制大致从这几个部分来讲:JS模块机制的由来.CommonJS AMD CMD.Node模块机制和包和n ...
- GMap.Net解决方案之在WinForm和WPF中使用GMap.Net地图插件的开发
在做地理位置相关的开发时,总是面临高额地图引擎费用让大部分用户望而却步,加之地图数据又是天价,那么GMap.NET就是首选了,它本身就是开源免费,服务器可以在本地缓存,以后访问时就可以直接访问. 可以 ...