大数据基础班项目(禁爬协议)|青训营笔记

221 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第 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是否可爬。