1. 程式人生 > >python 爬蟲爬取煎蛋網妹子圖

python 爬蟲爬取煎蛋網妹子圖

前言

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

煎蛋網站

煎蛋網.png

煎蛋網.png

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


007bk2ovgy1fsy6w0g6x9j30ia0rfjwd.jpg

007bk2ovgy1fsy6w0g6x9j30ia0rfjwd.jpg


007bk2ovgy1fsplp6cen2j30i20rwn0j.jpg

007bk2ovgy1fsplp6cen2j30i20rwn0j.jpg

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

爬取結果

爬取成果.png

爬取成果.png

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

程式構造

程式結構.png

程式結構.png

程式主要是由 6 個函式組成:

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

程式思路

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

原始碼分析

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


除錯.png

除錯.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

用 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() 函式下載圖片直至下載所有圖片。

優化改進

在公眾號「Python知識圈」回覆「jiandan」也可以獲取原始碼。

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

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

本公眾號專注:

1.python 技術分享

2.python 爬蟲分享

3.資料、工具共享

 歡迎關注我們,一起成長!


我建一個技術交流群,群裡有大佬,可以進群一起討論學習,共同進步。進群方式見公眾號聯絡方式處。
群裡我用 python 寫了個微信機器人,歡迎體驗!