知識(shí)儲(chǔ)備,簡(jiǎn)單爬蟲的必知必會(huì)婚温,核心--wh01

知識(shí)儲(chǔ)備描焰,簡(jiǎn)單爬蟲的必知必會(huì),【核心】

一栅螟、實(shí)驗(yàn)說(shuō)明

1. 環(huán)境登錄

無(wú)需密碼自動(dòng)登錄荆秦,系統(tǒng)用戶名shiyanlou

2. 環(huán)境介紹

本實(shí)驗(yàn)環(huán)境采用帶桌面的Ubuntu Linux環(huán)境,實(shí)驗(yàn)中會(huì)用到桌面上的程序:

  1. xfce終端:Linux命令行終端力图,打開后會(huì)進(jìn)入 shell 環(huán)境步绸,可以使用Linux命令
  2. Firefox:瀏覽器,可以用在需要前端界面的課程里搪哪,只需要打開環(huán)境里寫的HTML/JS頁(yè)面即可
  3. GVim:非常好用的編輯器靡努,最簡(jiǎn)單的用法可以參考課程Vim編輯器

3. 環(huán)境使用

使用GVim編輯器輸入實(shí)驗(yàn)所需的代碼及文件,使用 xfce終端運(yùn)行所需命令進(jìn)行操作晓折。

實(shí)驗(yàn)報(bào)告可以在個(gè)人主頁(yè)中查看惑朦,其中含有每次實(shí)驗(yàn)的截圖及筆記,以及每次實(shí)驗(yàn)的有效學(xué)習(xí)時(shí)間(指的是在實(shí)驗(yàn)桌面內(nèi)操作的時(shí)間漓概,如果沒(méi)有操作漾月,系統(tǒng)會(huì)記錄為發(fā)呆時(shí)間)。這些都是您學(xué)習(xí)的真實(shí)性證明胃珍。

實(shí)驗(yàn)樓虛擬機(jī)梁肿,自帶了python2.X和python3.X版本蜓陌,本課程基于 python2

二、課程介紹

  • 一門編程語(yǔ)言的學(xué)習(xí)吩蔑,實(shí)踐中學(xué)習(xí)的效果肯定是最好的钮热,我當(dāng)初學(xué)python就是沖著爬蟲來(lái)的,所以這次的課程目的是學(xué)會(huì)“炮制”簡(jiǎn)單的爬蟲

  • 本次課程烛芬,主要是介紹根據(jù)給定的url隧期,下載網(wǎng)頁(yè)中指定的模特圖片,python版本為2.7(3.0也可以運(yùn)行赘娄,print需要修改下)仆潮,使用的模塊有os、urllib2遣臼、re性置,單線程爬蟲

  • 這節(jié)課程基本沒(méi)有代碼全是原理,但是原理很重要揍堰,我會(huì)細(xì)講鹏浅,所以本節(jié)課程的文字內(nèi)容,請(qǐng)細(xì)看个榕。后面的課程是建立在這節(jié)課程之上來(lái)完成的篡石,而且課程之間是上下級(jí)調(diào)用關(guān)系,層次結(jié)構(gòu)很明顯西采。

  • 介紹下圖片來(lái)源--妹子圖凰萨,這個(gè)網(wǎng)站的整個(gè)爬取是最終目的,這節(jié)主要是對(duì)單個(gè)頁(yè)面內(nèi)的圖片械馆,進(jìn)行爬取胖眷,例如這個(gè) 誰(shuí)是這長(zhǎng)發(fā)女孩心中的白馬王子
    ,供上第一張圖片

    手下我的膝蓋

三霹崎、課題探索

  • 第一步:

  1. 套圖頁(yè)面:這里呢珊搀,主要是搜索頁(yè)面中的模特圖片路徑,但是圖片都是img標(biāo)簽尾菇,不設(shè)計(jì)個(gè)簡(jiǎn)單匹配套路境析,還真難得到100%的精確度,先提供一個(gè)網(wǎng)頁(yè)派诬,大家試著找找劳淆,軟妹

  2. 標(biāo)簽所有單頁(yè):獲取該網(wǎng)頁(yè)中的所有套圖頁(yè)的鏈接(進(jìn)入套圖頁(yè)),也就是給定一個(gè)標(biāo)簽頁(yè)默赂,獲得這個(gè)頁(yè)面中顯示的所有套圖頁(yè)的鏈接沛鸵,如某一標(biāo)簽頁(yè)example[15](實(shí)際情況比這還多),則這個(gè)頁(yè)面中包含了15個(gè)套圖

  3. 標(biāo)簽所有頁(yè)面:一個(gè)標(biāo)簽不止一個(gè)頁(yè)面缆八,獲取該標(biāo)簽的所有頁(yè)曲掰,如tag1[35][10](實(shí)際情況比這還多)疾捍,標(biāo)簽tag1又35個(gè)頁(yè)面,每個(gè)頁(yè)面又包含了10個(gè)套圖頁(yè)面栏妖,就像一個(gè)二維數(shù)組乱豆。

  4. 頂級(jí)域名頁(yè)面:這里,包含了所有的標(biāo)簽以及它們的鏈接底哥,不過(guò)呢咙鞍,有重復(fù),這里很簡(jiǎn)單的做一個(gè)去重就可以了趾徽,如meizi[8](實(shí)際情況比這還多),說(shuō)明這個(gè)網(wǎng)站包含8個(gè)標(biāo)簽翰守,每個(gè)標(biāo)簽里面又有它自己所包含的鏈接孵奶。

    圖的信息量還是蠻大的,如圖--
    Xmind
    Xmind
  5. 最后提下圖片保存路徑問(wèn)題蜡峰,這個(gè)呢在中層和高層中需要了袁,底層還是不需要的,底層測(cè)試時(shí)湿颅,傳入文件夾路徑并保存該文件夾下载绿,但在中層中,路徑問(wèn)題還是挺嚴(yán)重的油航,因?yàn)槲覀冏罱K是啟動(dòng)高層崭庸,傳入一個(gè)最初的文件夾路徑,然后高層創(chuàng)建中層文件夾谊囚,并且在調(diào)用中層函數(shù)時(shí)怕享,將標(biāo)簽鏈接和對(duì)應(yīng)的文件夾路徑傳過(guò)去,中層調(diào)用底層也是一樣的镰踏,都需要傳過(guò)去文件夾路徑函筋。不過(guò)文件夾路徑傳過(guò)去,最后是由底層來(lái)創(chuàng)建奠伪,高層和中層是不創(chuàng)建的跌帐,路徑是虛的,由底層創(chuàng)建并保存圖片文件:

  • meizi是由我們調(diào)用頂層時(shí)绊率,傳進(jìn)去文件夾谨敛,這個(gè)文件夾是真實(shí)存在的
  • baobei nvshen mengmeizi 是頂層擬定的,在調(diào)用中層時(shí)即舌,和相應(yīng)的標(biāo)簽鏈接一起傳給中層
  • 12 3324 346 89 這幾個(gè)文件夾是由中層擬定佣盒,在調(diào)用底層時(shí),和組圖套圖鏈接地址一起傳給底層顽聂,底層從鏈接地址的html中得到了圖片地址肥惭,從中層得到文件夾路徑來(lái)創(chuàng)建文件夾盯仪,下載圖片并保存到該文件夾中
    全部過(guò)程就是這樣,并且os模板里面蜜葱,有一次性創(chuàng)建多層(>=1)文件夾的函數(shù)全景,這一點(diǎn)是能實(shí)現(xiàn)的,我這么實(shí)現(xiàn)牵囤,是防止空文件夾的存在爸黄,當(dāng)有圖片時(shí),才一起創(chuàng)建揭鳞。如果想了解函數(shù)炕贵,你可以進(jìn)入python命令行,用help()函數(shù)查看函數(shù)介紹--
本地圖片保存框架
本地圖片保存框架

圖示野崇,文件夾是手工建的称开,利用tree命令行打印并截圖

  • 第二步:

源碼路徑,這個(gè)都是靠人腦分析乓梨,找好后鳖轰,順序暫定,介紹下re模塊和一個(gè)簡(jiǎn)單的匹配法則

.*?:匹配任意字符扶镀,非貪婪模式蕴侣,如re123re0re456re,則(re.*?re)匹配re123re和re456re
.*:匹配任意字符臭觉,貪婪模式昆雀,如re123re0re456re,則(re.*re)匹配re123re0re456re
():返回括號(hào)內(nèi)的匹配到的字符胧谈,如(re.*re)
這里呢忆肾,只需要熟悉和使用這個(gè)規(guī)則就可以了,其余的不做介紹

正則表達(dá)式可以在實(shí)驗(yàn)樓正則表達(dá)式課程深入學(xué)習(xí)

  • 第三步:

圖片下載保存菱肖,這里涉及os的一些函數(shù)

os.path.exists(文件路徑)客冈,檢測(cè)該文件路徑是否存在
os.mknod(文件),創(chuàng)建該文件稳强,上一級(jí)目錄必須存在
os.mkdirs(文件)场仲,創(chuàng)建文件,上一級(jí)目錄如果不存在則一同創(chuàng)建
進(jìn)入python操作界面退疫,help(os)渠缕,會(huì)顯示所有函數(shù)名及介紹,這里只做了簡(jiǎn)單介紹

有這些就夠了褒繁,os模塊亦鳞,基本也就是在圖片下載時(shí)需要

  • 第四步:

網(wǎng)絡(luò)問(wèn)題很重要,爬蟲速度是爬蟲里面核心,那網(wǎng)絡(luò)就是核心的核心

  1. 這個(gè)問(wèn)題的錯(cuò)誤在這里是不應(yīng)該這么早出現(xiàn)的燕差,但是警告會(huì)一開始就出現(xiàn)遭笋,如果等它報(bào)錯(cuò)停止運(yùn)行的問(wèn)題出現(xiàn)的時(shí)候再解除,這實(shí)在并不是一個(gè)好決策
  2. 這個(gè)問(wèn)題的優(yōu)化徒探,可以直接將爬蟲進(jìn)化瓦呼,或者說(shuō)是‘腿的個(gè)數(shù)’翻了個(gè)倍夜只。簡(jiǎn)單描述下這個(gè)問(wèn)題:在前期勾习,一個(gè)圖片的大小也就200k~500k的樣子士袄,也就2秒左右速度很快凳忙,但是網(wǎng)絡(luò)延遲能達(dá)到10秒甚至更高,所以你的帶寬利用率也就是10%不到风瘦,這是前期警告火鼻。
  3. 在網(wǎng)絡(luò)不穩(wěn)定或網(wǎng)絡(luò)擁堵的情況下棱诱,一旦urllib2這個(gè)模塊鏈接超時(shí)未響應(yīng)稚字,程序會(huì)等待然后就是錯(cuò)誤并終端程序的運(yùn)行侦另,這就是異常報(bào)錯(cuò),所以在這個(gè)項(xiàng)目的第一節(jié)課尉共,就應(yīng)該解決這個(gè)大隱患的小Bug.
  • 第五步:既然網(wǎng)絡(luò)問(wèn)題提出來(lái)了,那就補(bǔ)上相應(yīng)的解決方法:

python基礎(chǔ)中弃锐,有異常檢測(cè)try...except袄友,使用urllib2.open(),補(bǔ)抓urllib2.URLError異常霹菊,單獨(dú)置于一個(gè)函數(shù)中剧蚣,當(dāng)不成功時(shí)返回空字符串,通知調(diào)用函數(shù)繼續(xù)調(diào)用該函數(shù)

def loadurl(url):
    try:
        conn = urllib2.urlopen(url, timeout=5)
        html = conn.read()
        return html
    except urllib2.URLError:
        errorReport.errorLoadUrl(url)
        return ''
    except Exception:
        print("unkown exception in conn.read()")
        return ''

同樣的旋廷,保存圖片到本地鸠按,也需要進(jìn)行超時(shí)檢測(cè),以防報(bào)錯(cuò)

  • 第六步:補(bǔ)充說(shuō)明饶碘,在這個(gè)后期目尖,我也添上了“改進(jìn)爬蟲優(yōu)化網(wǎng)路速率提高爬蟲速度的多線程模式”,會(huì)以一節(jié)課程的形式單獨(dú)補(bǔ)充扎运,不作為本課的核心課程瑟曲,作為拓展課程。

四豪治、本項(xiàng)目層次結(jié)構(gòu)介紹

五洞拨、組圖下載

這節(jié)需要介紹的基礎(chǔ)知識(shí),大概就是這些负拟,下節(jié)的主要內(nèi)容是圖片下載和url鏈接問(wèn)題

Python3教程烦衣、項(xiàng)目網(wǎng)站--傳送門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子花吟,更是在濱河造成了極大的恐慌秸歧,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件示辈,死亡現(xiàn)場(chǎng)離奇詭異寥茫,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)矾麻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門纱耻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人险耀,你說(shuō)我怎么就攤上這事弄喘。” “怎么了甩牺?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵蘑志,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我贬派,道長(zhǎng)急但,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任搞乏,我火速辦了婚禮波桩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘请敦。我一直安慰自己镐躲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布侍筛。 她就那樣靜靜地躺著萤皂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匣椰。 梳的紋絲不亂的頭發(fā)上裆熙,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音窝爪,去河邊找鬼弛车。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蒲每,可吹牛的內(nèi)容都是我干的纷跛。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼邀杏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼贫奠!你這毒婦竟也來(lái)了唬血?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤唤崭,失蹤者是張志新(化名)和其女友劉穎拷恨,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谢肾,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腕侄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芦疏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冕杠。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖酸茴,靈堂內(nèi)的尸體忽然破棺而出分预,到底是詐尸還是另有隱情,我是刑警寧澤薪捍,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布笼痹,位于F島的核電站,受9級(jí)特大地震影響酪穿,放射性物質(zhì)發(fā)生泄漏凳干。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一被济、第九天 我趴在偏房一處隱蔽的房頂上張望纺座。 院中可真熱鬧,春花似錦溉潭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至赞别,卻和暖如春畏陕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仿滔。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工惠毁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人崎页。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓鞠绰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親飒焦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子屿笼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容