python 爬蟲爬取煎蛋網妹子圖


python 爬蟲爬取煎蛋網妹子圖

前言

大家好,這里是「brucepk」爬蟲 系列教程。此文首發於「brucepk」公眾號,歡迎大家去關注。此系列教程以實例項目為材料進行分析,從項目中學習 python 爬蟲,跟着我一起學習,每天進步一點點。

煎蛋網站

煎蛋網.png
煎蛋網.png

很多朋友都反應學 python 語言太枯燥,學不進去,其實學語言最好的方法是自己用所學的語言做項目,在項目中學習語言的用法。今天給大家帶來的項目是用 python3 爬取煎蛋網妹子的圖片。圖片質量還不錯,我放兩張圖片大家感受下。


007bk2ovgy1fsy6w0g6x9j30ia0rfjwd.jpg
007bk2ovgy1fsy6w0g6x9j30ia0rfjwd.jpg

007bk2ovgy1fsplp6cen2j30i20rwn0j.jpg
007bk2ovgy1fsplp6cen2j30i20rwn0j.jpg

這個項目用了 requests + selenium + beautifulsoup 庫對網站的圖片進行抓取。接下來我就,給大家一步步解析一下,怎么用 python 爬蟲爬取圖片並下載的。

爬取結果

爬取成果.png
爬取成果.png

以上就是爬取的結果,通過運行 meizi.py 代碼,就可以把圖片保存在我指定的目錄下,如果沒有此目錄,就用程序自動創建目錄,爬取的所有圖片都保存在此目錄下。

程序構造

程序結構.png
 

程序主要是由 6 個函數組成:

get_html() :利用 webdriver 來請求對應的網站。
get_page():解析面跳轉地址。
mkdir():判斷目錄是否存在,不存在就創建一個。
get_pic():提取圖片鏈接。
download(allimgs):通過圖片鏈接下載保存。
main():程序執行的主函數。

程序思路

  1. 對目標網站鏈接進行分析,找出目標網站鏈接的規律。
  2. 從目標網站里面提取圖片鏈接。
  3. 將圖片下載並保存在目錄中。

源代碼分析

我們通過f12調試頁面,看到圖片的鏈接,發現此鏈接並沒有在源代碼中,我們推測,圖片應該是通過 js 加載的,對於需要 js 才能加載出來的網站,我們就可以利用 selenium 的自動化測試請求庫來進行加載。利用 selenium 請求可以模擬真實瀏覽器訪問。


調試.png
 
browser = webdriver.Chrome()
wait = WebDriverWait(browser, 3) 

需要下載 chrome 驅動放在 python 安裝目錄下。

分頁鏈接分析

def get_page(): base_url = 'http://jandan.net/ooxx/' #第一次進入的原始地址 soup = BeautifulSoup(get_html(base_url), 'lxml') #解析原始地址 current_pages=soup.select('.cp-pagenavi .current-comment-page')[0].get_text()[1:-1] #取出當前頁面字段 urllist = [] for page in range(1,int(current_pages)+1): real_url=base_url+'page-'+str(page)+'#comments' #拼出分頁地址 urllist.append(real_url) return urllist #返回所有分頁地址列表 

原始鏈接 base_url = 'http://jandan.net/ooxx/',當我們點擊下一頁時,發現在原始鏈接的后面加了一段:
圖5

其中加的數字,就是表示現在所在的頁數,通過 BeautifulSoup 庫對頁面進行解析,用選擇器提取頁數的字段,加入到鏈接中進行拼接。

創建目錄

def mkdir():
    isExists=os.path.exists('E:\jiandan') if not isExists: print('創建目錄') os.makedirs('E:\\jiandan') #創建目錄 os.chdir('E:\\jiandan') #切換到創建的文件夾 return True else: print('目錄已存在,即將保存!') return False![gzh.jpg](https://upload-images.jianshu.io/upload_images/5285452-b6c108884d5c02d0.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 

用 os.path.exists 方法來個判斷,如果不存在此目錄就創建一個,如果存在就忽略。

提取圖片

def get_pic(): for url in get_page(): mkdir() html=get_html(url) soup=BeautifulSoup(html,'lxml') allimgs=soup.select('div .text p img') allimgs=re.findall('src="(.*?)"',str(allimgs)) download(allimgs) print("下載完畢!") 

用 BeautifulSoup 解析源碼,用選擇器循環提取圖片的鏈接,並調用 download() 函數下載圖片直至下載所有圖片。

優化改進

源代碼我已上傳到 Github 上,需要的同學可以點擊「閱讀原文」,如果覺得程序還不錯的話,可以給我項目點個 star。在微信后台回復「jiandan」也可以獲取源碼。

本次的程序還有一些不足的地方,比如利用 selenium 庫在爬取的時候非常的慢,每頁我還設置了 3 秒等待時間,這部分待優化。

這波教程不點個贊,說不過去吧?哈哈。這個網站有很多福利,我只能說大家注意身體啊。

推薦閱讀

零基礎學 python 之人人都愛列表

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM