2020-03-13

仙女姐姐@chuu chloe和@什么七七——python圖片爬蟲

兩年以前用爬蟲爬過一個學校網(wǎng)站逼友,現(xiàn)在忘得那是一干二凈榴嗅∧赐铮可不成想周偎,望著眾多的美女圖片,我竟然也會有嫌麻煩的時候撑帖∪乜玻或許我應該說,是眼前這讓人眼花繚亂目不暇接的美好胡嘿,讓我感嘆時間的寶貴蛉艾,想要迅速將她們“一網(wǎng)打盡”,我找到高分chrome插件衷敌,卻發(fā)現(xiàn)這些插件只能下載部分圖片勿侯,于是我從頭撿起爬蟲,寫下這篇整理性的文章缴罗。沒有需求助琐,哪來的學習的動力?

最簡單的爬蟲

首先必須說的是面氓,我不需要寫那種一爬爬全站的爬蟲兵钮,我只看好看的XD。這次看到的是這位chuu chloe姐姐舌界,大家或許見過掘譬,絕對一見傾心的那種。爬的網(wǎng)站是我時不時逛逛的宅男吧禀横,上面有時會有高質量的圖屁药。我沒有大量爬圖,不會對網(wǎng)站產(chǎn)生什么影響。目標網(wǎng)址:http://zhainanba.net/21483.html酿箭。貼一張目標截圖:

概覽.jpg

我第一眼看到這位姐姐复亏,就看呆了,已經(jīng)說不出話來缭嫡。我想說缔御,看到她我好像看到了無人的純白雪山——她值得我為她寫一個爬蟲。

初次嘗試

爬蟲重要的不是代碼妇蛀,而是分析網(wǎng)頁的方法耕突。老規(guī)矩F12進行審查。

審查元素1.jpg

很快注意到圖片的url是由數(shù)字結尾评架,按尾數(shù)進行循環(huán)便能將這些圖全爬下來眷茁。首先只寫這么一個簡單的規(guī)則找點感覺。

### 如果url規(guī)則簡單到能一眼看出纵诞,直接用簡單的版本上祈。b                                                         
# 導入常用的爬蟲包
import urllib.request 
import re 
import os 
import requests

# 定義一個路徑函數(shù),用來確定保存圖片的路徑
targetDir = input('圖片存儲路徑')

def destFile(path):
    if not os.path.isdir(targetDir): # 如果路徑不存在則創(chuàng)建
        os.mkdir(targetDir)
    pos = path.rindex('/') # 以最后一個斜杠后的字符作為圖片名稱
    t = os.path.join(targetDir,path[pos+1:])
    return t 

fail_url = [] # 這個列表是為了記錄下之后可能出現(xiàn)的超時情況
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36','Referer': 'http://zhainanba.net/21483.html'}

注意到我這里的header里寫了referer浙芙,第一次寫沒有寫referer登刺,是我小看了這個網(wǎng)站,我以為他不會有反爬措施嗡呼,沒想到還是采用了基本的反爬纸俭。。南窗。referer簡單來說就是標識“你是從哪個網(wǎng)站來到這個網(wǎng)站的”揍很,如果不加referer的話會報404(推薦寫header時把能加的信息都加上)。

爬蟲代碼

下面寫爬蟲體万伤。我加了一個超時處理的步驟女轿,因為在運行時發(fā)現(xiàn)有些圖片在request時會卡住,可能網(wǎng)站有進一步的反爬措施壕翩,具體的之后得檢查源碼才能看出是網(wǎng)絡問題還是有反爬機制。

if __name__ == "__main__":
        for i in range(1,31,1): # 爬尾號為1 - 30 的所有圖片
        i = str(i)
        if len(i) < 2: # 之前注意到url中尾數(shù)小于10都補了零傅寡,這里也用簡單的判斷補上
            i = '0' + i
        else:
            pass
        link = 'http://ac.meijiecao.net/ac/img/znb/meizitu/20190611_meizitu_' + i + '.jpg' # 爬取的圖片url
        print(link)
        try: 
            r = requests.get(link,headers = header,timeout=(10,10)) # 用timeout和try來防止超時
            filename = destFile(link)
            if r.status_code == 200: # 響應碼為200時才進行寫入放妈,304和404都不寫
                open(filename,'wb').write(r.content) 
                print(r.status_code,'Sucess!')
                del r 
            else:
                print(r.status_code,'Fail.')
                pass
        except:
            print(link,'Timeout.')
            fail_url.append(link) # 將超時的url加入列表
            pass

運行結果如下:

結果1.jpg

因為圖片有水印,這里也不便于直接放出荐操,給出鏈接:鏈接: https://pan.baidu.com/s/1leTJLlw8mm7AVlP_hb9ATg 提取碼: 16ti

再戰(zhàn):采用BeautifulSoup

老是去查看url的尾數(shù)也不是長久之計芜抒,很多url都不規(guī)則,不可能每一次都去找規(guī)律托启,所以用網(wǎng)頁解析器才是正道宅倒。簡單的parser我選BeautifulSoup。bs4的全面用法我推薦Beautiful Soup 4.4.0 文檔屯耸。這次換一個爬拐迁,@什么七七 這位小姐姐也是一位仙女蹭劈。

# parse html with bs4, urls from zhainanba
from urllib import request
from bs4 import BeautifulSoup
fail_url = []
header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36','Referer':'http://zhainanba.net/tag/%e7%bd%91%e7%bb%9c%e7%ba%a2%e4%ba%ba'} # referer和url需要自己更改,懂的都懂线召,不懂只能查

targetDir = input('圖片存儲路徑')

def getHTMLcode(url):
    re_url = request.Request(url,headers=header)
    page_code = request.urlopen(re_url).read()
    return page_code.decode('utf8')

def getImg(page_code):
    soup = BeautifulSoup(page_code,'html.parser')
    image_list = soup.find(attrs={'class':'article-content'}) # 查看源碼可知所有的圖片都在article-content
    image = image_list.find_all('img') # 圖片在article-content下的img里
    for img in image:
        img_url = img.get('src') # 圖片的url在src里
        print(img_url)
        try: 
            r = requests.get(img_url,headers = header,timeout=(10,10)) # 用timeout和try來防止超時
            filename = destFile(img_url)
            if r.status_code == 200: # 響應碼為200時才進行寫入铺韧,304和404都不寫
                open(filename,'wb').write(r.content) 
                print(r.status_code,'Sucess!')
                del r 
            else:
                print(r.status_code,'Fail.')
                pass
        except:
            print(img_url,'Timeout.')
            fail_url.append(img_url)
            pass

        
url = 'http://zhainanba.net/22631.html'
page_code = getHTMLcode(url)
getImg(page_code)

結果如下:

結果2.jpg

也分享在網(wǎng)盤里:

鏈接: https://pan.baidu.com/s/1jot8BkVSVB9JT-599fZSDA 提取碼: bp63

總結

寫爬蟲不僅是為了短時間獲得自己想獲得的東西,也是為了以后的一些小項目做準備缓淹。其中的一個想法是哈打,如果要訓練仙女們的臉部模型,大批量的照片必不可少讯壶,所以之后可能要挑戰(zhàn)sina的反爬機制料仗,或者找一些圖量大的網(wǎng)站琢磨一下。這個過程中伏蚊,肯定會積累很多的優(yōu)質圖片立轧,不只有仙女,還會有那些不太上得了臺面的東西丙挽,我就不說了肺孵,我挺相信我的眼光的。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末颜阐,一起剝皮案震驚了整個濱河市平窘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凳怨,老刑警劉巖瑰艘,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肤舞,居然都是意外死亡紫新,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門李剖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芒率,“玉大人,你說我怎么就攤上這事篙顺∨忌郑” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵德玫,是天一觀的道長匪蟀。 經(jīng)常有香客問我,道長宰僧,這世上最難降的妖魔是什么材彪? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上段化,老公的妹妹穿的比我還像新娘嘁捷。我一直安慰自己,他們只是感情好穗泵,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著现诀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上成福,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天内斯,我揣著相機與錄音潭苞,去河邊找鬼。 笑死秀菱,一個胖子當著我的面吹牛赶么,可吹牛的內容都是我干的清钥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼搬葬,長吁一口氣:“原來是場噩夢啊……” “哼女仰!你這毒婦竟也來了床三?” 一聲冷哼從身側響起擒抛,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎补疑,沒想到半個月后歧沪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡莲组,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年诊胞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锹杈。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡撵孤,死狀恐怖,靈堂內的尸體忽然破棺而出竭望,到底是詐尸還是另有隱情邪码,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布咬清,位于F島的核電站闭专,受9級特大地震影響奴潘,放射性物質發(fā)生泄漏。R本人自食惡果不足惜影钉,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一画髓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧平委,春花似錦奈虾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至昂勉,卻和暖如春浪册,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背岗照。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工村象, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人攒至。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓厚者,卻偏偏與公主長得像,于是被迫代替她去往敵國和親迫吐。 傳聞我的和親對象是個殘疾皇子库菲,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內容

  • 同學們,關于今天的語文課志膀,霍老師開始敲黑板熙宇,講重點了!快拿出小本本溉浙,睜大小眼睛烫止,記一記吧! 3月13日語文課 課文...
    霍小瑩會努力噠閱讀 1,072評論 0 2
  • 20上師大學科語文經(jīng)驗貼來啦~ 嗨嘍戳稽,學弟學妹們馆蠕,我是一位剛參加完20屆考研的學姐,我本科是一個普通的二本院校惊奇,專...
    woainicxj閱讀 208評論 0 0
  • 我把小母雞從屋頂扔了下去互躬,母雞驚慌失措的撲扇著臂膀,一開始它飛翔的線型比較平緩颂郎,不斷下滑吼渡,那一刻我看到它利用...
    Older漫閱讀 181評論 0 0
  • 大學已經(jīng)畢業(yè)了,短短的一年換了好幾份工作乓序,每一份工作都沒有堅持太長時間诞吱,不是嫌棄工作太累舟奠。就是嫌棄工資太低,沒有什...
    張偉_d525閱讀 238評論 0 0
  • 183. Customers Who Never Order Question: Suppose that a w...
    廖少少閱讀 624評論 0 0