1. 程式人生 > >python爬蟲入門---第三篇:自動下載圖片

python爬蟲入門---第三篇:自動下載圖片

等待 部分 app class 請您 pictures string fin from

適用的圖片網站:美桌

import requests
import re
import urllib
from bs4 import BeautifulSoup

def get_html_text(url):
    ‘‘‘
    獲取網址url的HTML代碼,以字符串形式返回html代碼

    ‘‘‘
    try:
        res = requests.get(url, timeout = 6)
        res.raise_for_status()
        res.encoding = res.apparent_encoding
        return
res.text except: return ‘‘ print(請求異常) def get_grupic_url(page_url, grupic_url_list, unique_url): ‘‘‘ 獲取每張頁面中每個圖冊的url鏈接,每個圖冊的url都有共同 且有別於其他鏈接的url,我們把部分特征的字符串放在unique_url 中,通過它我們就可以篩選出頁面中所有圖冊的url ‘‘‘ page_html = get_html_text(page_url) #解析頁面的html代碼
soup = BeautifulSoup(page_html, html.parser) #獲取該頁面html代碼中的所有<a>標簽 a_tags = soup.find_all(a) #篩選出href屬性中含有特征字符串unique_url的<a>標簽 for a_tag in a_tags: url = a_tag.get(href) if re.match(unique_url, url): #將篩選出的<a>標簽的url加入到列表中 grupic_url_list.append(url)
def get_allpages_url(cover_url, pages_url_list): ‘‘‘通過遞歸獲取所有頁面的鏈接, 直到該頁面不存在class = ‘next‘的<a>標簽 ‘‘‘ html = get_html_text(cover_url) soup = BeautifulSoup(html, html.parser) #找到屬性class = ‘next‘的<a>標簽 a_tags = soup.find_all(a, class_ = next) #如果<a>標簽存在,就將該標簽的url加入列表 if a_tags: nextpage_url = a_tags[0].get(href) pages_url_list.append(nextpage_url) #遞歸獲取下一個頁面的<a>標簽 get_allpages_url(nextpage_url, pages_url_list) #當不存在屬性class = ‘next‘的<a>標簽時,說明這是最後一頁,結束遞歸 return None def download_each_page(grupic_url_list, file_path1, page): ‘‘‘ 通過調用download_each_group()函數, 下載每一頁中的所有組圖 ‘‘‘ print(\n\n第 {0} 頁開始下載:\n.format(str(page))) gup = 1 #組數標記 #下載該頁面中每個小相冊的所有圖片 for grupic_url in grupic_url_list: file_path2 = file_path1 + _{0}.format(str(gup)) #獲取該頁面的h1標題 h1_string = get_h1_string(grupic_url) try: download_each_group(grupic_url, file_path2, h1_string, gup) gup += 1 except: print("下載異常") gup += 1 continue def download_all_page(pages_url_list, file_path, unique_url): ‘‘‘通過調用函數download_each_page(), 來下載所有頁面的圖片 ‘‘‘ pages_num = len(pages_url_list) print(\n相冊一共有 {0} 頁,已經開始下載請您耐心等待....format(str(pages_num))) page = 1 #頁數標記 for page_url in pages_url_list: grupic_url_list = [] get_grupic_url(page_url, grupic_url_list, unique_url) file_path1 = file_path + r\{0}.format(str(page)) download_each_page(grupic_url_list, file_path1, page) page += 1 def download_each_group(grupic_url, file_path, h1_string, gup, n = 1): ‘‘‘ 進入鏈接為grupic_url的圖冊,下載我們需要的大圖片, 並遞歸進入下一個頁面開始下載,直到圖冊的h1標題發生改變 ‘‘‘ new_file_path = file_path + _{0}.jpg.format(str(n)) n += 1 html = get_html_text(grupic_url) soup = BeautifulSoup(html, html.parser) #當該頁面的h1標題和小相冊封面的h1標題相同時開始下載 if h1_string == soup.h1.string: #找到屬性class_ = ‘pic-large‘的img標簽 img_tags = soup.find_all(img, class_ = pic-large) img_tag = img_tags[0] #下載該img標簽屬性data-original提供的url鏈接,即為目標圖片的鏈接 urllib.request.urlretrieve(img_tag.get(data-original), new_file_path) #獲取下一個頁面的鏈接 next_url = img_tag.parent.get(href) print(第 {0} 組:{1}, 第 {2} 張下載完成啦.format(str(gup), h1_string, str(n-1))) #遞歸下載下一個頁面的目標圖片 download_each_group(next_url, file_path, h1_string, gup, n) #當h1標題不同時,說明進入到了另一個小相冊,結束遞歸 return None def get_h1_string(url): ‘‘‘ 獲取網址為url網站的h1標簽內容 ‘‘‘ try: html = get_html_text(url) soup = BeautifulSoup(html, html.parser) return soup.h1.string except: print(h1標題獲取異常) return ‘‘ def main(): ‘‘‘ 主函數 ‘‘‘ #封面的url鏈接,也就是第一頁的url鏈接 cover_url = http://www.win4000.com/mt/huge_1.html #小相冊鏈接中有別於其他鏈接的特征字符串 unique_url = rhttp://www.win4000.com/meinv #圖片存放的目錄 file_path = rG:\pictures\huge #存放所有頁面鏈接的列表 pages_url_list = [] #先將封面,即第一頁加入列表 pages_url_list.append(cover_url) #獲取其他頁面的鏈接 get_allpages_url(cover_url, pages_url_list) #下載所有頁面中所有圖片的函數 download_all_page(pages_url_list, file_path, unique_url) main()

python爬蟲入門---第三篇:自動下載圖片