zoukankan      html  css  js  c++  java
  • Python学习笔记从Web抓取信息之用requests模块从web下载文件

    随笔记录方便自己和同路人查阅。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

      requests 模块让你很容易从 Web 下载文件,不必担心一些复杂的问题,诸如网络错误、连接问题和数据压缩。requests 模块不是 Python 自带的,所以必须先安装。

    通过命令行,运行 pip install requests

    #------------------------------------------------我是可耻的分割线-------------------------------------------

      1、检查requests模块是否安装成功,在交互式环境输入import requests,如果没有报错,就证明安装成功。

      这样就证明是没有问题的。

      2、用requests.get()函数下载一个网页,示例代码;

    #! python 3
    # -*- coding:utf-8 -*-
    # Autor: Li Rong Yang
    #导入第三方库
    import requests
    
    #该 URL 指向一个文本页面,其中包含整部罗密欧与朱丽叶
    res = requests.get('http://www.gutenberg.org/cache/epub/1112/pg1112.txt')
    
    #打印它的类型
    print(type(res))
    
    #通过检查 Response 对象的 status_code 属性,你可以了解对这个网页的请求是否成功。如果该值等于requests.codes.ok,那么一切都好
    if res.status_code == requests.codes.ok:
        print('True')
    else:
        print('False')
    
    #打印大小
    print(len(res.text))
    
    #打印文本内容
    print(res.text[:250])
    

      运行结果:

      requests.get()函数接受一个要下载的 URL 字符串。通过在 requests.get()的返回值上调用 type(),你可以看到它返回一个 Response 对象,其中包含了 Web 服务器对

    你的请求做出的响应。

      该 URL 指向一个文本页面,其中包含整部罗密欧与朱丽叶。通过检查 Response 对象的 status_code 属性,你可以了解对这个网页的请求是否成功。如果该值等于requests.codes.ok,那么一切都好(顺便说一下,HTTP协议中“OK”的状态码是 200。你可能已经熟悉404 状态码,它表示“没找到”)。如果请求成功,下载的页面就作为一个字符串,保存在 Response 对象的 text变量中。这个变量保存了包含整部戏剧的一个大字符串,调用 len(res.text)表明,它的长度超过 178000 个字符。最后,调用 print(res.text[:250])显示前 250 个字符。

      3、检查错误

      正如你看到的,Response 对象有一个 status_code 属性,可以检查它是否等于requests.codes.ok,了解下载是否成功。检查成功有一种简单的方法,就是在 Response

    对象上调用 raise_for_status()方法。如果下载文件出错,这将抛出异常。如果下载成功,就什么也不做。

      raise_for_status()方法,下载错误,示例代码:

    #! python 3
    # -*- coding:utf-8 -*-
    # Autor: Li Rong Yang
    import requests
    res = requests.get('http://inventwithpython.com/page_ _that_ _does_ _not_ _exist')
    res.raise_for_status()
    

      运行结果:

      raise_for_status()方法,下载正常,示例代码: 

    #! python 3
    # -*- coding:utf-8 -*-
    # Autor: Li Rong Yang
    import requests
    res = requests.get('http://www.gutenberg.org/cache/epub/1112/pg1112.txt')
    res.raise_for_status()
    

      运行结果:

     

      raise_for_status()方法是一种很好的方式,确保程序在下载失败时停止。这是一件好事:你希望程序在发生未预期的错误时,马上停止。如果下载失败对程序来说

    不够严重,可以用 try 和 except 语句将 raise_for_status()代码行包裹起来,处理这一错误,不让程序崩溃。

      遇到下载错误是不停止工作,示例代码:

    #! python 3
    # -*- coding:utf-8 -*-
    # Autor: Li Rong Yang
    import requests
    '''
    遇到下载错误不停止工作
    '''
    res = requests.get('http://inventwithpython.com/page_ _that_ _does_ _not_ _exist')
    try:
        res.raise_for_status()
    except Exception as exc:
        print('there was a problem: %s'%(exc))
    

      运行结果:

      4、将下载文件保存在硬盘

      现在,可以用标准的 open()函数和 write()方法,将 Web 页面保存到硬盘中的一个文件。但是,这里稍稍有一点不同。首先,必须用“写二进制”模式打开该文件,即向函数传入字符串'wb',作为 open()的第二参数。即使该页面是纯文本的(例如前面下载的罗密欧与朱丽叶的文本),你也需要写入二进制数据,而不是文本数据,目的是为了保存该文本中的“Unicode 编码”。

      为了将 Web 页面写入到一个文件,可以使用 for 循环和 Response 对象的iter_content()方法。

       示例代码:

    #! python 3
    # -*- coding:utf-8 -*-
    # Autor: Li Rong Yang
    import requests
    res = requests.get('http://www.gutenberg.org/cache/epub/1112/pg1112.txt')
    try:
        res.raise_for_status()
    except Exception as exc:
        print('there was a problem: %s' % (exc))
        
    playFile = open('d:\RomeoAndJuliet.txt','wb')
    
    #iter_content方法,循环的每次迭代中
    for chunk in res.iter_content(100000):
        #把每次迭代内容写入文件
        playFile.write(chunk)
    playFile.close()
    

      运行结果:会把下载内容写入指定文件

  • 相关阅读:
    20080619 SQL SERVER 输入 NULL 的快捷键
    20090406 Adobe的“此产品的许可已停止工作”错误的解决办法
    20080908 Office Powerpoint 2007 不能输入中文的解决办法
    20080831 ClearGertrude Blog Skin 's cnblogs_code class
    20080603 Facebook 平台正式开放
    20080519 安装 Microsoft SQL Server 2000 时提示 创建挂起的文件操作
    test
    Linux—fork函数学习笔记
    SOA的设计理念
    Why BCP connects to SQL Server instance which start with account of Network Service fail?
  • 原文地址:https://www.cnblogs.com/lirongyang/p/9689665.html
Copyright © 2011-2022 走看看