Python 爬蟲 爬取 煎蛋網 圖片


今天, 試着爬取了煎蛋網的圖片。

用到的包:

urllib.request 

os

分別使用幾個函數,來控制下載的圖片的頁數,獲取圖片的網頁,獲取網頁頁數以及保存圖片到本地。過程簡單清晰明了

直接上源代碼:

import urllib.request
import os


def url_open(url):
    req = urllib.request.Request(url)
    req.add_header('user-agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36')
    response = urllib.request.urlopen(url)
    html = response.read()

    return html

def get_page(url):
    html = url_open(url).decode('utf-8')

    a = html.find('current-comment-page')+23
    b = html.find(']',a)

    return html[a:b]


def find_imgs(url):
    html = url_open(url).decode('utf-8')
    img_addrs = []

    a = html.find('img src=')

    while a != -1:
        b = html.find('.jpg',a ,a+255)
        if b != -1:
            img_addrs.append('https:'+html[a+9:b+4]) # 'img src='為9個偏移  '.jpg'為4個偏移
        else:
            b = a+9
        a = html.find('img src=', b)

    return img_addrs


def save_imgs(folder, img_addrs):
    for each in img_addrs:
        filename = each.split('/')[-1]
        with open(filename, 'wb') as f:
            img = url_open(each)
            f.write(img)
        print(img_addrs)

def download_mm(folder = 'xxoo', pages = 5):
    os.mkdir(folder)
    os.chdir(folder)

    url = 'http://jandan.net/ooxx/'
    page_num = int(get_page(url))

    for i in range(pages):
        page_num -= i
        page_url = url + 'page-'+ str(page_num) + '#comments'
        img_addrs = find_imgs(page_url)
        save_imgs(folder, img_addrs)



if __name__ == '__main__':
    download_mm()

 

其中在主函數download_mm()中,將pages設置在了5面。

本來設置的是10,但是在程序執行的過程中。出現了404ERROR錯誤

即imgae_url出現了錯誤。嘗試着在save_img()函數中加入了測試代碼:print(img_addrs),

 

 

 

 

想到會不會是因為后面頁數的圖片,img_url的格式出現了改變,導致404,所以將pages改成5,

再次運行,結果沒有問題,圖片能正常下載:

 

 

仔細觀察發現,剛好是在第五面的圖片往后,出現了不可下載的問題(404)。 所以在煎蛋網上,我們直接跳到第6面查看圖片的url。

 

 上圖是后5面的圖片url,下圖是前5面的圖片url

 

 

而源代碼中,尋找的圖片url為使用find()函數,進行定為<img src=‘’> <.jpg>中的圖片url,所以后5面出現的a href 無法匹配,即出現了404 ERROR。如果想要下載后續的圖片,需要重新添加一個url定位

 

即在find中將 img src 改成 a href,偏移量也需要更改。

 

總結:

使用find()來定位網頁標簽確實太過low,所以以后在爬蟲中要盡量使用正則表達式Beautifulsoup包來提高效率,而這兩項我還不是特別熟,所以需要更多的訓練。

 


免責聲明!

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



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