天天看點

爬取-站長的圖檔素材

# 1)請求對象的定制
# 2)擷取網頁的源碼
# 3)下載下傳

# 需求 下載下傳的前十頁的圖檔
# https://sc.chinaz.com/tupian/qinglvtupian.html   1
# https://sc.chinaz.com/tupian/qinglvtupian_page.html

import urllib.request
from lxml import etree

# 請求對象定制,實作
def create_request(page):
    # 判斷頁碼,定制url
    if(page == 1):
        url = 'https://sc.chinaz.com/tupian/qinglvtupian.html'
    else:                              # 字元串拼接,兩邊都要是字元串類型
        url = 'https://sc.chinaz.com/tupian/qinglvtupian_' + str(page) + '.html'

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

    # 請求對象的定制(url參數傳遞,headers參數傳遞)
    request = urllib.request.Request(url = url, headers = headers)
    return request

# 擷取網頁源碼,實作
def get_content(request):
    # 模拟浏覽器B,向伺服器S,發送請求
    response = urllib.request.urlopen(request)
    # 擷取響應資料(read讀方法傳回位元組形式二進制資料.decode解碼)
    content = response.read().decode('utf-8')
    return content


def down_load(content):

    # 解析伺服器響應的檔案。用來解析字元串格式的HTML文檔對象,将傳進去的字元串轉變成 element 對象
    tree = etree.HTML(content)

    # xpath解析,圖檔名字
    name_list = tree.xpath('//div[@id="container"]//a/img/@alt')

    # xpath解析,圖檔位址
    # 一般設計圖檔的網站都會進行懶加載,隻有當顯示到圖檔的位置src2——>才會變成src。是以要變之前擷取資料
    src_list = tree.xpath('//div[@id="container"]//a/img/@src2')

    # 周遊資料
    for i in range(len(name_list)):

        # 使用下标擷取清單的元素
        name = name_list[i]
        src = src_list[i]

        # url拼接
        url = 'https:' + src
        # print(name,url)
        # 下載下傳圖檔
        # urllib.request.urlretrieve('圖檔位址','檔案的名字')
        urllib.request.urlretrieve(url=url,filename='./loveImg/' + name + '.jpg')
# 程式入口
if __name__ == '__main__':
    # 注意強制類型轉換
    start_page = int(input('請輸入起始頁碼'))
    end_page = int(input('請輸入結束頁碼'))

    # 周遊
    for page in range(start_page,end_page+1):
        # (1) 請求對象的定制
        request = create_request(page)
        # (2)擷取網頁的源碼
        content = get_content(request)
        # (3)下載下傳
        down_load(content)      
爬取-站長的圖檔素材