urllib和urllib3

urllib和urllib3

一、urllib庫

1.1 urllib庫所包含的模塊

在這裏插入圖片描述
在這裏插入圖片描述

1.2 urlopen方法

在這裏插入圖片描述

1.3 添加請求頭

在這裏插入圖片描述

1.4 cookie操作

在這裏插入圖片描述

1.5 代理設置

在這裏插入圖片描述

1.6 response對象

在這裏插入圖片描述

1.7 urllib.parse模塊

在這裏插入圖片描述
在這裏插入圖片描述

1.8 urllib.error模塊

在這裏插入圖片描述

1.9 robotparse模塊

在這裏插入圖片描述

二、urllib3庫

2.1 簡介

在這裏插入圖片描述

2.2 構造請求

在這裏插入圖片描述

2.3 response屬性

在這裏插入圖片描述

2.4 json數據解析

在這裏插入圖片描述

2.5 大數據處理

在這裏插入圖片描述

2.6 代理

在這裏插入圖片描述

2.7 request參數

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

三、爬蟲開發的基本流程

在這裏插入圖片描述

四、練習

在這裏插入圖片描述

import urllib3
import re
import os
# 構造請求
http = urllib3.PoolManager()
url_list = ["http://www.weimeitupian.com", "http://www.weimeitupian.com/page/2", "http://www.weimeitupian.com/page/3"]
for i in range(len(url_list)):
    res = http.request("GET", url_list[i])  # 循環發送請求
    res_str = res.data.decode()  # 將響應的數據解碼
    print("正在下載第{}頁的數據".format(i+1))
    # 匹配創建文件夾時所需要的文本並篩選出所需要的文本
    dir_name = re.findall(r'title="(.+?)"', res_str, re.S)[9:-10]
    # 匹配每個圖片的url並篩選出所需要的url
    img_url = re.findall(r'<!--<img src="(.+?)"', res_str, re.S)[:45]
    # print(dir_name, len(dir_name))
    # print(img_url, len(img_url))
    for i in range(len(img_url)):
        try:
            res_img = http.request("GET", img_url[i])
            # res_img = http.request("GET", img_url[i], preload_content=False)  # 分段存儲必須要帶上preload_content=False
        except Exception as e:
            print("url出錯!", e)
            res_img = http.request("GET", "http://www.weimeitupian.com"+img_url[i])
            # res_img = http.request("GET", "http://www.weimeitupian.com" + img_url[i], preload_content=False)
        # 拼接一個路徑,用來創建文件夾
        dir_path = os.path.join(r"D:\Python學院學習環境\pachong\img", dir_name[i])
        # 判斷該路徑是否存在,不存在則創建
        if not os.path.exists(dir_path):
            os.mkdir(dir_path)
        # 拼接一個文件路徑
        file_path = os.path.join(dir_path, "{}".format(img_url[i].split("/")[-1]))
        with open(file_path, "wb")as f:
            print("正在下載第{}條數據".format(i+1))
            f.write(res_img.data)
            # for chunk in res_img.stream(32):  # 分段寫入,每次寫入32個字節
            #     f.write(chunk)

效果圖
在這裏插入圖片描述

發佈了96 篇原創文章 · 獲贊 36 · 訪問量 6196
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章