最新 用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!