[快学Python3]HTTP处理 - urllib模块

概述

urllib是python最基础、最核心的HTTP协议支持库,诸多第三方库都依赖urllib,所以urllib是必须掌握的HTTP库。

掌握了urllib有利于:

  1. 深入理解http协议
  2. 可以更好的学习和掌握第三方http库
  3. 快速的开展基于http的接口测试
  4. 快速进入爬虫学习之路

urllib组成

我们一起看下urllib由哪些模块或类构成:

  • urllib.request 用于构建http请求
  • urllib.response 用于处理http响应值的类
  • urllib.parse 用于url处理
  • urllib.error 用于错误处理
  • urllib.robotparser 用于处理robot.txt文件

爬取数据实例

下面我们基于豆瓣网的API来看看代码实例

豆瓣网API网址:https://developers.douban.com/wiki/?title=guide

下面的实例演示了如何使用豆瓣网的API 进行数据爬取,从而演示urllib的强大能力。

请勿使用下述代码持续爬取数据

请勿使用下述代码持续爬取数据

请勿使用下述代码持续爬取数据

# -*- coding:utf-8 -*-

__author__ = '苦叶子'

import urllib.request
import csv
import codecs

if __name__ == "__main__":
    print("urllib爬取豆瓣网数据示例")
    print("搜索下关键字: Python")

    url = "https://api.douban.com/v2/book/search?q=python"
    response = urllib.request.urlopen(url)

    # 将bytes数据流解码成string
    ebook_str = response.read().decode()

    # 将string转换成dict
    ebook_dict = eval(ebook_str)

    #print(ebook_dict)
    #print(type(ebook_dict))
    count = ebook_dict["count"]    
    total = ebook_dict["total"]

    with codecs.open('books.csv', 'w', 'utf-8') as csvfile:
        spamwriter = csv.writer(csvfile, delimiter=',',
                                quotechar='|', quoting=csv.QUOTE_MINIMAL)
        spamwriter.writerow(["书名", "作者", "描述", "出版社", "价格"])
        # 写书信息        
        for book in ebook_dict["books"]:
            spamwriter.writerow([book["title"], 
                ",".join(book["author"]), 
                book["summary"], 
                book["publisher"], 
                book["price"]])
            


        # 从第2页开始,获取其他书籍信息        
        # 这段代码采集了大量数据,容易被封IP,所以注释了
        """
        for start in range(1, int(total / count) + 1):
            url = "https://api.douban.com/v2/book/search?q=python&start=%d" % start
            try:
                response = urllib.request.urlopen(url)
            except:                
                print("别老爬别人的数据,要爬也别太快,会被封IP的")  
                break


            # 将bytes数据流解码成string
            ebook_str = response.read().decode()

            # 将string转换成dict
            ebook_dict = eval(ebook_str)

            # 输出书籍信息
            for book in ebook_dict["books"]:
                spamwriter.writerow([book["title"], 
                ",".join(book["author"]), 
                book["summary"], 
                book["publisher"], 
                book["price"]]) 
        """    
        print("总计搜索了 %d 本书的信息" % total)

请勿使用上述代码持续爬取数据

请勿使用上述代码持续爬取数据

请勿使用上述代码持续爬取数据

对于其他的接口,这里就不再演示。

基本功能实例

下面我们演示下urllib基本功能实例,例如如何获取返回码等等基本信息。

# -*- coding:utf-8 -*-

__author__ = '苦叶子'

import urllib.request

if __name__ == "__main__":    
    print("urllib基本实例")

    url = "http://www.baidu.com"

    # 访问下百度
    response = urllib.request.urlopen(url)    

    # 打印下状态码
    print(response.status)    
    
    # 打印下状态码对应的可读性文字说明,例如在http协议里,200 对应 OK
    print(response.reason)    
    
    # 打印下请求返回的header
    print(response.headers)    
    
    # 打印下请求返回的数据
    print(response.read().decode("utf-8"))

上述仅仅是urllib的基本功能,还有更强大的功能,我们后续再分享。

原文发布于微信公众号 - 开源优测(DeepTest)

原文发表时间:2017-10-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏coding for love

在线商城项目12-商品列表页价格筛选实现

之前我们约定前端传startPrice和endPrice来获取价格区间。我们设定如下规则:

17220
来自专栏coding for love

JS常用设计模式解析

我想作为一个前端开发者,前期大多数只会关注代码的功能性。但是随着编程经验的增加,维护更大更复杂的代码模块,需要的就不仅仅只是代码功能性的实现,还需要关注代码的复...

13530
来自专栏Golang语言社区

行为树behavior3go介绍

在游戏开发中,以状态切换来驱动其执行流程的系统,引入行为树可以大大简化编码和配置。

22740
来自专栏杨建荣的学习笔记

巧用xmltype解析clob数据(r2笔记33天)

对于clob的数据,很多场合中都使用xml的格式,但是对于数据的查取和处理总是感觉力不从心。在条件允许的情况下,如果能够巧妙的使用xmltype来做数据处理,无...

36170
来自专栏云飞学编程

Python爬虫的简单实现!用python爬虫自己做天气预报查询

最近小编在学习爬虫,就想找个东西练练手,小说、图片、音乐什么的都烂大街了,正好最近天气是越来越冷,小编窝家里自己敲了个天气简单查询的代码,请大家指正下!

13310
来自专栏开源优测

[快学Python3]HTTP处理 - urllib模块

概述 urllib是python最基础、最核心的HTTP协议支持库,诸多第三方库都依赖urllib,所以urllib是必须掌握的HTTP库。 掌握了urllib...

29980
来自专栏java架构师

设计模式学习笔记之中介者模式

最近在学习设计模式,把学习过程中的点滴思考记录下来,其中也有一些从网上看到的精彩解析。 先从中介者模式开始记录。 精髓:将一堆对象(同事类)之间的复杂交互,封装...

406100
来自专栏逍遥剑客的游戏开发

被FMOD的内存管理坑了一把

35820
来自专栏云飞学编程

Python大牛给写的爬虫学习路线,分享给大家看看!

我们学习python的最终目的是要用它来达到我们的目的,它本身是作为工具的存在,我们一定要掌握自己的工具的各类设置,比如安装、环境配置、库的安装,编辑器的设置等...

9920
来自专栏【转载】DRF+Vue+Mysql_生鲜超市系统

十、购物车、订单管理和支付功能

Serializer继承BaseSerializer,但是Seriazer中并没有重新update方法,所有添加一个update方法

31010

扫码关注云+社区

领取腾讯云代金券