爬虫学习——Robots协议和 robotparser模块

276次阅读
没有评论
爬虫学习——Robots协议和

初级爬虫学习资源

  • 爬虫学习——遵纪守法
  • 一文速通的正则表达式
  • python中使用正则表达式——为所欲为
  • 爬虫实战(1)——小试牛刀
  • 如果对符合下列条件的网站进行强行数据采集时,会具有法律风险。

  • 采集的站点有声明禁止爬虫采集时。
  • 网站通过Robots协议拒绝采集时。
  • 所以为了避免面向监狱爬虫,我们需要了解Robots协议和robotparser模块(判断url是否可爬取)。

    可爬取协议——Robots协议

    • Robots.txt(统一小写)是一种存放于网站根目录下的文本文件
    • 用来告告诉该协议对哪些爬虫生效,哪些网页可以被这些爬虫爬取,哪些不可以
    • 该协议有三个属性:
    • Uer-agent : 描述了对哪些爬虫有效
    • Disallow : 描述了哪些网页不可爬
    • Allow : 声明哪些网页可爬,比Disallow优先级高

    案例:

    User-agent: * Disallow: / Allow: /public/

    该协议对所有爬虫有效,不允许抓取所有页面,但可以抓取 public 目录

    User-agent: Baiduspider Disallow:

    允许百度爬虫抓取所有页面

    User-agent: Baiduspider Disallow: /

    禁止百度爬虫爬取任何目录

    User-agent: WebCrawler Disallow: User-agent: * Disallow: /

    只允许某一个爬虫访问

    • 一些常见搜索爬虫的名称及其对应的网站
    爬虫名称名称网站
    BaiduSpider 百度 www.baidu.com
    Googlebot 谷歌 www.google.com
    360Spider 360 搜索 www.so.com
    YodaoBot 有道 www.youdao.com
    Bingbot 必应 www.bing.com

    robotparser模块

    • 该模块提供了RobotFileParser类,这个类可以根据网站的 robots.txt 文件来判断一个爬虫是否有权限来爬取这个网页

    • RobotFileParser类的方法

  • RobotFileParser(url):创建对象
  • url就是你要爬取的网站的robots.txt 链接

  • set_url(url):设置引用robots.txt文件的 url
  • read(): 读取url并将其提供给解析器
  • can_fetch(User-Agent,url):返回User-Agent是否可以抓取这个 URL
  • parse(lines):按照 robots.txt 的语法规则来分析lines(字符串类型)
  • mtime方法:返回上次抓取和分析 robots.txt 的时间
  • 用于定期检查以抓取最新的 robots.txt

  • modified方法:将当前时间设置为上次抓取和分析 robots.txt 的时间
  • 最后两个方法对于长时间分析和抓取的搜索爬虫很有帮助

    案例

    对于小白,会前四个就够了

    from urllib.robotparser import RobotFileParser #导入RobotFileParser类

    url = 'https://www.python.org/robots.txt' #python官网的robots.txt的url

    #方法1:直接用url创造对象 robot = RobotFileParser(url) #用url调用这个类的构造方法

    #方法2:用无参构造函数创造对象,再用url调用对象的set_url > 目的都是一样的,设置url robot1 = RobotFileParser() robot1.set_url(url) #set_url方法: 设置url

    #在设置url之后,一定要调用对象的read方法,不然can_fetch方法只会返回false rp.read() #read方法: 读取 robots.txt 文件并进行分析

    #can_fetch(User-Agent,url):返回User-Agent是否可以抓取这个 url print(rp.can_fetch('Baiduspider', url))

    神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

    相关文章:

    版权声明:Python教程2022-10-28发表,共计1609字。
    新手QQ群:570568346,欢迎进群讨论 Python51学习