[Python3]HTTP處理 - urllib模塊
阿新 • • 發佈:2017-09-10
color sea 如何使用 code odin publish wiki 行數 search
概述
urllib是python最基礎、最核心的HTTP協議支持庫,諸多第三方庫都依賴urllib,所以urllib是必須掌握的HTTP庫。
掌握了urllib有利於:
-
深入理解http協議
-
可以更好的學習和掌握第三方http庫
-
快速的開展基於http的接口測試
-
快速進入爬蟲學習之路
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__ = ‘谷白‘ importurllib.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模塊