[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的基本功能,还有更强大的功能,我们后续再分享。

时间: 2024-10-12 22:07:56

[Python3]HTTP处理 - urllib模块的相关文章

python3.5中urllib模块抓取指定URL内容

python3.5中把python中的urllib和urllib2模块合并为urllib模块啦.urllib模块下有五个类: 抓取指定URL下内容封装成一个类文件对象,其中的很多方法操作和文件操作是一样的.

【2】数据采集 - urllib模块

python2环境下关于urllib2的使用可以学习这篇文章.本文主要针对python3环境下使用urllib模块实现简单程序爬虫. 链接:https://www.jianshu.com/p/31833117b34b urllib模块的使用 1.数据编码处理 我们通过爬虫程序可以得到网站返回的数据,但是返回的数据在展示过程中,出现了乱码的问题,是因为网站本身有自己的字符编码(通常情况下是 UTF-8),我们程序在采集完成之后在控制台进行展示的过程中是使用本地默认编码(windows 一般是 gb

python3.x中的urllib模块

来源http://my.oschina.net/u/999436/blog/113317 我尝试着找找python3.3.0的change log.里面并没有找到urllib的修改记录.然而这一修改记录却在python3.0的change log中. 原文是这样写的: a new urllib package was created. It consists of code from urllib, urllib2, urlparse, and robotparser. The old modu

Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html

Python3学习笔记(urllib模块的使用) 1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) -         url:  需要打开的网址 -         data:Post提交的数据 -         timeout:设置网站的访问超时时间 直接用urllib.request模块的urlopen()

python3 urllib模块

3.0版本中已经将urllib2.urlparse.和robotparser并入了urllib中,并且修改urllib模块,其中包含5个子模块,即是help()中看到的那五个名字. Python2中的urllib模块,在Python3中被修改为 20.5. urllib.request — Extensible library for opening URLs 20.6. urllib.response — Response classes used by urllib 20.7. urllib

Urllib 模块

Urllib模块 在python2和python3中的差异 在python2中,urllib和urllib2各有各个的功能,虽然urllib2是urllib的升级版,但是urllib2还是不能完全替代urllib,但是在python3中,全部封装成一个类,urllib 在python2和python3中的差异 Urllib2可以接受一个Request对象,并以此可以来设置一个URL的headers,但是urllib只接受一个URL.这就意味着你不能通过urllib伪装自己的请求头. Urllib

python爬虫开发之urllib模块详细使用方法与实例全解

爬虫所需要的功能,基本上在urllib中都能找到,学习这个标准库,可以更加深入的理解后面更加便利的requests库. 首先 在Pytho2.x中使用import urllib2——-对应的,在Python3.x中会使用import urllib.request,urllib.error 在Pytho2.x中使用import urllib——-对应的,在Python3.x中会使用import urllib.request,urllib.error,urllib.parse 在Pytho2.x中使

学习Python的urllib模块

 urllib 模块作为Python 3 处理 URL 的组件集合,如果你有 Python 2 的知识,那么你就会注意到 Python 2 中有 urllib 和 urllib2 两个版本的模块,这些现在都是 Python 3 的 urllib 包的一部分,具体如何来体现它们之间的关系 Python 3 的 urllib 模块是一堆可以处理 URL 的组件集合.如果你有 Python 2 的知识,那么你就会注意到 Python 2 中有 urllib 和 urllib2 两个版本的模块.这些现在

定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容。提示(可以了解python的urllib模块)

1 定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容.提示(可以了解python的urllib模块) 2 import urllib.request 3 4 def get_page(url): 5 response = urllib.request.urlopen(url) 6 html = response.read() 7 return html 8 9 print(get_page(url='https://www.baidu,com'))