re爬取糗圖

import urllib.request
import re
import os
import time

# 輸入起始頁碼和結束頁碼
start_page = int(input('請輸入起始頁碼-'))
end_page = int(input('請輸入結束頁碼-'))
#https://www.qiushibaike.com/pic/page/2/
url = 'https://www.qiushibaike.com/pic/page/{}/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
}

# 搞一個循環,依次下載每一頁的所有圖片
for page in range(start_page, end_page + 1):
    print('正在爬取第--%s--頁......' % page)
    # 拼接url
    urlt = url.format(page)
    # 構建請求對象
    request = urllib.request.Request(url=urlt, headers=headers)
    # 發送請求,得到響應
    response = urllib.request.urlopen(request)
    print(response)  #<http.client.HTTPResponse object at 0x0000000002ABADD8>

    # 得到網頁字符串格式內容
    content = response.read().decode('utf8')

    # 寫一個正則表達式,提取裏面所有的圖片鏈接
    # pattern = re.compile(r'<img src="(.*?)" alt="(.*?)">')
    # 這樣寫不對,接着修改,先找所有的div class="thumb"
    # pattern = re.compile(r'<div class="thumb">.*?</div>', re.S)
    # 接着細化,得到裏面的img的src屬性

#     < div class ="thumb" >< a href = "/article/121275861" target = "_blank" >< img src = "//pic.qiushibaike.com/system/pictures/12127/121275861/medium/2XPCMHUBH8F154RX.jpg" alt = "人生實在是大起大落" ></a>
# </div>

    pattern = re.compile(r'<div class="thumb">.*?<img src="(.*?)" alt="(.*?)" />.*?</div>', re.S)
    ret = pattern.findall(content)
    # print(ret)

    # 遍歷這個列表,依次下載每個圖片
    for info in ret:
        # 取出圖片的地址
        image_url = 'https:' + info[0]
        # 取出圖片的名字
        image_name = info[1]
        # print(image_name)
        # 拼接文件的名字
        filename = image_name + '.' + image_url.split('.')[-1]
        print('正在下載--%s--...' % filename)
        dirname = 'qiutu'
        filepath = os.path.join(dirname, filename)
        # 下載圖片
        urllib.request.urlretrieve(image_url, filepath)
        print('結束下載--%s--' % filename)
        time.sleep(2)
    print('結束爬取第--%s--頁...' % page)
    time.sleep(2)

# 單行模式  注意提取字符串裏面內容有換行  re.S     否則返回可能爲空

# .*? 不需要,匹配走        (.*?)保留

#注意右擊檢查中的代碼可能與源碼中的代碼不同,
 導致匹配錯誤,某個標籤可能會有 /符號,而檢查中沒有 /符號


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