1. 程式人生 > >[Python3]HTTP處理 - urllib模塊

[Python3]HTTP處理 - urllib模塊

color sea 如何使用 code odin publish wiki 行數 search

概述

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的基本功能,還有更強大的功能,我們後續再分享。

[Python3]HTTP處理 - urllib模塊