这是我参与「第四届青训营 」笔记创作活动的第 24 天
一个大数据小白的自学成长之路 ( 三 ): 禁爬协议
作为一个本科应用数学专业的大数据领域的萌新 , 可能没法像技术大牛一样有很多的技术产出 , 暂且就把我在做项目时的一些心得和所学作为笔记吧 !( 有些大白话写的不是很专业 , 大佬轻喷 )
一、简介
robots协议是国际互联网界通行的爬虫规范,由网站所有者配置一个文件:robot.txt,这个文件指明了哪些目录下的网页是不允许爬虫抓取的,对于这些目录爬虫不能爬取。
二、robots基本语法:
User-agent:指定对哪些爬虫生效
Disallow:指定要屏蔽的网址
User-agent:http协议里的User-agent。robots.txt利用User-agent来区分各个引擎的爬虫,比如说google网页搜索爬虫的User-agent为Googlebot。
Disallow 行列出的是要拦截的网页,以正斜线 (/) 开头,可以列出特定的网址或模式。要屏蔽整个网站,使用正斜线即可;要屏蔽某一目录以及其中的所有内容,在目录名后添加正斜线;要屏蔽某个具体的网页,就指出这个网页。
(* 为通配符)
三、实例:
例如掘金的官网,在其后加上robots.txt:
User-agent: *
Disallow: /subscribe/subscribed
Disallow: /user/settings
Disallow: /drafts
Disallow: /news-drafts
Disallow: /editor
Disallow: /oauth-result
Disallow: /search
Disallow: /equation
Disallow: /book/order
Disallow: /books/payment
Disallow: /appview
Disallow: /creator
Disallow: /notification
Disallow: /translate
Disallow: /zhuanlan
Sitemap: https://juejin.cn/sitemap/posts/index.xml
Sitemap: https://juejin.cn/sitemap/user/index.xml
Sitemap: https://juejin.cn/sitemap/news/index.xml
Sitemap: https://juejin.cn/sitemap/columns/index.xml
Sitemap: https://juejin.cn/sitemap/tag/index.xml
Sitemap: https://juejin.cn/sitemap/pin/index.xml
Sitemap: https://juejin.cn/sitemap/collections/index.xml
Sitemap: https://juejin.cn/sitemap/keywords/index.xml
Sitemap: https://juejin.cn/sitemap/user_posts/index.xml
Sitemap: https://juejin.cn/sitemap/user_pins/index.xml
四、遵循禁爬协议的实现思路
在爬取url之后识别一下其中是否包含 Disallow目录中的内容然后再分发没有被识别的url即可。
具体的代码如下:
def robot_txt(project_link):
"""
利用robotparser分析知乎 Robots 协议
"""
n = 0
for oneurl in project_link:
rp = urllib.robotparser.RobotFileParser()
# 设置 robots.txt 文件 URL
rp.set_url('https://www.shuishi.com/robots.txt')
# 读取操作必须有, 不然后面解析不到
rp.read()
# 判断网址是否运行爬取
print(rp.can_fetch('*', oneurl))
if(rp.can_fetch('*', oneurl) == False):
del project_link[n]
n+1
这里实际上是将一整个列表中所有的url进行了验证,对于特定的user agent去判断每一个url是否可爬。