煎蛋網(wǎng)站
很多朋友都反應(yīng)學(xué) python 語(yǔ)言太枯燥,學(xué)不進(jìn)去,其實(shí)學(xué)語(yǔ)言最好的方法是自己用所學(xué)的語(yǔ)言做項(xiàng)目,在項(xiàng)目中學(xué)習(xí)語(yǔ)言的用法。今天給大家?guī)?lái)的項(xiàng)目是用 python3 爬取煎蛋網(wǎng)妹子的圖片。圖片質(zhì)量還不錯(cuò),我放兩張圖片大家感受下。
這個(gè)項(xiàng)目用了 requests + selenium + beautifulsoup 庫(kù)對(duì)網(wǎng)站的圖片進(jìn)行抓取。接下來(lái)我就,給大家一步步解析一下,怎么用 python 爬蟲(chóng)爬取圖片并下載的。
爬取結(jié)果
以上就是爬取的結(jié)果,通過(guò)運(yùn)行 meizi.py 代碼,就可以把圖片保存在我指定的目錄下,如果沒(méi)有此目錄,就用程序自動(dòng)創(chuàng)建目錄,爬取的所有圖片都保存在此目錄下。
程序構(gòu)造
程序主要是由 6 個(gè)函數(shù)組成:
get_html() :利用 webdriver 來(lái)請(qǐng)求對(duì)應(yīng)的網(wǎng)站。
get_page():解析面跳轉(zhuǎn)地址。
mkdir():判斷目錄是否存在,不存在就創(chuàng)建一個(gè)。
get_pic():提取圖片鏈接。
download():通過(guò)圖片鏈接下載保存。
main():程序執(zhí)行的主函數(shù)。
程序思路
對(duì)目標(biāo)網(wǎng)站鏈接進(jìn)行分析,找出目標(biāo)網(wǎng)站鏈接的規(guī)律。
從目標(biāo)網(wǎng)站里面提取圖片鏈接。
將圖片下載并保存在目錄中。
源代碼分析
我們通過(guò)f12調(diào)試頁(yè)面,看到圖片的鏈接,發(fā)現(xiàn)此鏈接并沒(méi)有在源代碼中,我們推測(cè),圖片應(yīng)該是通過(guò) js 加載的,對(duì)于需要 js 才能加載出來(lái)的網(wǎng)站,我們就可以利用 selenium 的自動(dòng)化測(cè)試請(qǐng)求庫(kù)來(lái)進(jìn)行加載。利用 selenium 請(qǐng)求可以模擬真實(shí)瀏覽器訪問(wèn)。
利用 selenium 請(qǐng)求網(wǎng)頁(yè)需要下載 chrome 驅(qū)動(dòng)放在 python 安裝目錄下。
分頁(yè)鏈接分析
1def get_page():2 base_url = 'http://jandan.net/ooxx/' #第一次進(jìn)入的原始地址3 soup = BeautifulSoup(get_html(base_url), 'lxml') #解析原始地址4 current_pages=soup.select('.cp-pagenavi .current-comment-page')[0].get_text()[1:-1] #取出當(dāng)前頁(yè)面字段5 urllist = []6 for page in range(1,int(current_pages)+1):7 real_url=base_url+'page-'+str(page)+'#comments' #拼出分頁(yè)地址8 urllist.append(real_url)9 return urllist #返回所有分頁(yè)地址列表
原始鏈接 base_url = 'http://jandan.net/ooxx/',當(dāng)我們點(diǎn)擊下一頁(yè)時(shí),發(fā)現(xiàn)在原始鏈接的后面加了一段「page-52#comments」。
其中加的數(shù)字,就是表示現(xiàn)在所在的頁(yè)數(shù),通過(guò) BeautifulSoup 庫(kù)對(duì)頁(yè)面進(jìn)行解析,用選擇器提取表示頁(yè)數(shù)的字段「current-comment-page」,加入到原始鏈接中進(jìn)行拼接。
創(chuàng)建目錄
用 os.path.exists 方法來(lái)個(gè)判斷,如果不存在此目錄就創(chuàng)建一個(gè),如果存在就忽略。
提取圖片
1def get_pic():2 for url in get_page():3 mkdir()4 html=get_html(url)5 soup=BeautifulSoup(html,'lxml')6 allimgs=soup.select('div .text p img')7 allimgs=re.findall('src='(.*?)'',str(allimgs))8 download(allimgs)9 print('下載完畢!')
用 BeautifulSoup 解析源碼,用選擇器循環(huán)提取圖片的鏈接,并調(diào)用 download() 函數(shù)下載圖片直至下載所有圖片。
優(yōu)化改進(jìn)
本次的程序還有一些不足的地方,比如利用 selenium 庫(kù)在爬取的時(shí)候非常的慢,每頁(yè)我還設(shè)置了 3 秒等待時(shí)間,這部分待優(yōu)化。還有所有頁(yè)面的圖片都保存在一個(gè)目錄下,沒(méi)有分開(kāi)保存,這部分也可以優(yōu)化。
這波教程不點(diǎn)個(gè)關(guān)注,說(shuō)不過(guò)去吧?哈哈。這個(gè)網(wǎng)站有很多福利,我只能說(shuō)大家注意身體啊。
聯(lián)系客服