1. 程式人生 > >最新 用Python 批量爬取網上美眉圖片(其實其他的圖片也可以啦!)

最新 用Python 批量爬取網上美眉圖片(其實其他的圖片也可以啦!)

標題 最新 用Python 批量爬取網上美眉圖片

故事是這樣的:七月份給室友說,我要開始學習Python了。室友一臉懵,並問我Python是啥?確實對於我這個小城市來說Python之風還沒有吹到我們這裡來,以至於在我們大學都沒有開設這門課!很是尷尬。要不是在網上聽說Python很牛我也不會接觸到。於是我便給室友說了Python的強大,可是我卻遭到了室友的嘲笑。嗚嗚嗚……。“士可殺不可辱。”我立下豪言壯志說:“三個月後我給你做出一個能批量獲取網上你最愛圖片的程式,給你瞅瞅!”。於是……

當然,關於這方面部落格上面有很多例子,但我讀了之後發現不是怎麼會,不太易懂。在這裡我以小白的身份寫下了這篇部落格,希望可以幫到更多的小白!(畢竟不能丟了咱Python的臉,哈哈哈。)

我目前自學了:Python基礎知識,Python爬蟲知識(僅限requests庫、os庫、BeautifulSoup庫、re庫、正則表示式)
好啦,不廢話了,咱們開始!

整理思路
1、從百度找到一個擁有大量美眉圖片的網址,我這裡用的是 “http://www.win4000.com/meitu.html” 直接一點,進入“美女”那一欄。
這是開啟網頁的截圖

2、找到我們需要的圖片中的一個。(這一個儲存了,其他的也就簡單了,換監事發現規律。)
3、儲存圖片。

大概就是這樣,下面我們開始編寫程式。
1.我發現點開一個圖片后里面是相簿一樣可以翻動,有很多子照片,先檢視一下子照片的規律
第一張

第二張
唉,居然有規律,那就舒服了,到時候用一個 for 迴圈就解決了。舒坦,再來!

2、要知道,我現在的知識只會把有連結的圖片下載下來,所以我得找到每一張圖片的連結,隨便點開一張圖片,在網頁上檢視原始碼。通過關鍵詞找到圖片連結。(我這裡是通過圖片尺寸找的)
原始碼!
通過尺寸為鑰匙,然後周圍一個連結一個連結的試探,哎呦喂,找到了!就是劃線部分,結尾是 .jpg 格式,一開啟還真是!舒坦,繼續!
3、所以現在我們的任務也就清晰了。獲取這個圖片的連結就可以了。(可能是自學不到胃只到了喉嚨管,一看到前面的 img 就懵圈了,不會提取這個呀,我只會 “a”的提取呀!但是我有CSDN呀,問問大神不就可以了。嘿嘿嘿。)
就是他,我問的他!簡直完美!
舒服呀!一看就懂了,正則表示式!

4、現在萬事俱備,啥都不差,開始程式設計!

import requests
from
bs4 import BeautifulSoup import traceback import re import os import time #我是新手,先定義的主函式,這樣我的頭腦清晰一些! def main(): A_url = "http://www.win4000.com/meinvtag2.html" B_url = "" lsM = [] #用來儲存目錄網址連結的呦! lsZ = [] #用來儲存每張圖片連線的呦! getMULIANJIE(lsM,A_url) for i in lsM: for k in range(20): #這裡我大概看了一下每一個母相簿後面的子照片都沒有超過20個的,所以用的20! if k == 0: B_url = "http://www.win4000.com/mein" + i + ".html" else: B_url = "http://www.win4000.com/mein" + i + "_" + str(k) + ".html" getPHOTO(B_url,lsZ) for j in lsZ: for m in j: downPHOTO(m) #解析網頁 def getHTMLText(url): try: r = requests.get(url) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "" #獲取網頁連結目錄 def getMULIANJIE(ls,url): html = getHTMLText(url) soup = BeautifulSoup(html,'html.parser') a = soup.find_all('a') for i in a: try: href = i.attrs['href'] ls.append(re.findall(r"[meinv]\d{6}",href)[0]) except: continue #獲取照片連結 def getPHOTO(urlb,ls): ls.clear() html = getHTMLText(urlb) ls.append(re.findall('url="(.*?)"',html)) #下載圖片 def downPHOTO(url): root = "D://tupian//" path = root + url.split('/')[-1] try: if not os.path.exists(root): os.mkdir(root) if not os.path.exists(path): r = requests.get(url) with open(path,'wb') as f: f.write(r.content) f.close() print("檔案儲存成功!") else: print("檔案已經存在!") except: print("爬取失敗!") time.sleep(0) main()

好啦!一切大功告成,我可以去我室友哪裡顯擺了!
其實我的程式碼還可以簡寫很多的,可是我覺得這樣的話小萌新更容易理解!
Python是真的強大,我要繼續學習了。

人生苦短,我學Python!