網站圖片下載 Python

import threading
import requests
from lxml import etree as et
import os

# 請求頭
headers = {
    # 用戶代理
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}

# 待抓取網頁基地址
base_url = 'https://www.23jj.com/'
# 保存圖片基本路徑
base_dir = 'D:/python/code/aixjj/'


# 保存圖片
def savePic(pic_url, page):
    # 如果目錄不存在,則新建
    if not os.path.exists(base_dir):
        os.makedirs(base_dir)
    # 分解符號 ['http:', '', 'img.23jj.com', 'image', '32', '3273', '0_236.jpg']
    arr = pic_url.split('/')
    # -1表示倒數第一個元素 -2 表示倒數第二個元素
    file_name = base_dir + str(page) + '_' + arr[-2] + arr[-1]
    print(file_name)
    # 獲取圖片內容
    response = requests.get(pic_url, headers=headers)
    # 寫入圖片
    # with expression as target:
    # expression:是一個需要執行的表達式;
    # target:是一個變量或者元組,存儲的是expression表達式執行返回的結果,可選參數。
    # 打開文件
    with open(file_name, 'wb') as fp:
        # 利用Respose對象的iter_content()方法循環,在每次迭代中調用write(),將內容寫入該文件
        for data in response.iter_content(128):
            fp.write(data)


# 觀察此網站總共只有62頁,所以循環62次
def download(k):
    # 請求頁面地址
    url = base_url + str(k)
    # 請求頁面內容
    response = requests.get(url=url, headers=headers)
    # 請求狀態碼
    code = response.status_code
    if code == 200:
        # etree.HTML()可以用來解析字符串格式的HTML文檔對象,將傳進去的字符串轉變成_Element對象。作爲_Element對象,
        # 可以方便的使用getparent()、remove()、xpath()等方法。
        html = et.HTML(response.text)
        # 獲取頁面所有圖片地址
        r = html.xpath('//li/a/img/@src')
        # 遍歷圖片地址
        for pic_url in r:
            a = 'http:' + pic_url
            savePic(a, k)
    print('第%d頁圖片下載完成' % k)


# 創建線程
for i in range(1, 63):
    threading.Thread(target=download, args=(i,)).start()

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章