zoukankan      html  css  js  c++  java
  • Python 网络爬虫 010 (高级功能) 解析 robots.txt 文件

    解析 robots.txt 文件

    使用的系统:Windows 10 64位
    Python 语言版本:Python 2.7.10 V
    使用的编程 Python 的集成开发环境:PyCharm 2016 04
    我使用的 urllib 的版本:urllib2

    注意: 我没这里使用的是 Python2 ,而不是Python3


    一 . 前言

    之前,我在网络爬虫科普的时候,介绍过robots.txt 文件,如果你还了解这个文件的功能,请到这个博客学习。

    有一些站点它在 robots.txt 文件中设定了禁止流量该站点的代理用户。既然目标站点有这样的规矩,我们就要遵循它。

    我们需要做的事情就是:先解析 robots.txt 文件。然后在在对需要下载的网页进行判断是否可以爬取。

    我们可以使用 Python 自带的 robotparser 模块,轻松的完成这项工作。下面进行实战。

    二 . 原理

    我们先来看看目标 robots.txt 文件:http://example.webscraping.com/robots.txt

    # section 1
    User-agent: BadCrawler
    Disallow: /
    
    # section 2
    User-agent: *
    Crawl-delay: 5
    Disallow: /trap 
    
    # section 3
    Sitemap: http://example.webscraping.com/sitemap.xml

    这个 robots.txt 文件中说:对于BadCrawler 这样的代理用户是禁止浏览本站点的。

    我们现在使用这个 Python 自带的 robotparser 模块测试一下:

    >>> import robotparser
    >>> rp = robotparser.RobotFileParser()
    >>> rp.set_url('http://example.webscraping.com/robots.txt')
    >>> rp.read()
    >>> url = 'http://example.webscraping.com'
    >>> user_agent = 'BadCrawler'
    >>> rp.can_fetch(user_agent, url)
    False
    >>> user_agent = 'GoodCrawler'
    >>> rp.can_fetch(user_agent, url)
    True
    >>>

    上面这个测试说明了,如果你将你的爬虫程序的 代理用户 设置为: BadCrawler 的话,因为你访问的目标站点已经警告你了:“我们禁止用户代理为BadCrawler 的用户访问本站点里面的所有网站”。所以,我们用 robotparser 模块创建的对象,通过rp.can_fetch(user_agent, url)函数返回 :False

    can_fetch() 函数前面的一堆都是初始化,can_fetch() 函数是在程序里面使用,它的功能:确定指定的用户代理是否允许访问网页。



    搞定

  • 相关阅读:
    大厂的面试官是如何挑人的?
    搞懂这7个Maven问题,带你吊打面试官!
    Spring Cloud Eureka 注册安全一定要做到位!
    09 webpack的介绍
    08 node.js 的使用
    07 Node.js安装及环境配置
    06-Nodejs介绍
    05-面向对象
    Mysql 的使用方法
    04-对象的单体模式
  • 原文地址:https://www.cnblogs.com/aobosir/p/5928539.html
Copyright © 2011-2022 走看看