中層:標簽網(wǎng)頁的獲取單網(wǎng)頁鏈接,難度簡單--wh03

中層:標簽網(wǎng)頁的獲取單網(wǎng)頁鏈接

一、實驗說明

1.1. 環(huán)境登錄

無需密碼自動登錄良蛮,系統(tǒng)用戶名shiyanlou

1.2. 環(huán)境介紹

本實驗環(huán)境采用帶桌面的Ubuntu Linux環(huán)境雇初,實驗中會用到桌面上的程序:

  1. Xfce 終端: Linux命令行終端灶伊,打開后會進入 shell 環(huán)境,可以使用Linux命令
  2. Firefox:瀏覽器货徙,可以用在需要前端界面的課程里芍瑞,只需要打開環(huán)境里寫的HTML/JS頁面即可
  3. GVim:非常好用的編輯器晨仑,最簡單的用法可以參考課程Vim編輯器

1.3. 環(huán)境使用

使用GVim編輯器輸入實驗所需的代碼及文件,使用終端運行所需命令進行操作拆檬。

實驗報告可以在個人主頁中查看洪己,其中含有每次實驗的截圖及筆記,以及每次實驗的有效學習時間(指的是在實驗桌面內(nèi)操作的時間竟贯,如果沒有操作答捕,系統(tǒng)會記錄為發(fā)呆時間)。這些都是您學習的真實性證明屑那。

實驗樓虛擬機拱镐,自帶了python2.X和python3.X版本,無需安裝 該實驗建議使用 python2.7 版本持际, 也就是默認版本

二沃琅、課程介紹

組圖頁面的下載,上一節(jié)已經(jīng)完成了已經(jīng)完成了蜘欲,這節(jié)呢益眉,需要做的蠻簡單,但是任務(wù)有兩個:

  • 獲取該標簽的全部鏈接地址
  • 獲取每個鏈接頁面的全部組圖鏈接地址

觀察下圖

此處輸入圖片的描述
此處輸入圖片的描述

做個簡答的思路分析:

  • 首頁鏈接就是meizi.html姥份,不過后面2郭脂、3、4澈歉、5朱庆、6的鏈接,只是后綴闷祥,我們需要簡單做個拼接娱颊,得到完整的鏈接腳本。另外凯砍,當前頁面就是1箱硕,所以1的鏈接為thisclass,我們采用的是從標簽首頁進去悟衩,然后直接獲取 >=2 的鏈接剧罩,利用標簽首頁地址,拼接得到標簽的所有完整鏈接地址座泳,這是第一步惠昔,得到所有標簽完整鏈接路徑幕与。
  • 每個鏈接里面,會有各組圖套圖的路徑镇防,我們又需要從每個路徑里面全部讀取出來啦鸣,再看下圖
組圖鏈接地址
組圖鏈接地址

其實就是在ul標簽的多個li,拿到ul標簽的代碼就行

三来氧、代碼詳解

先附上獲取標簽鏈接的代碼诫给,并給出詳細解析

第一個代碼塊:

文件名:meizi_series_nextpage
import re
import urllib2
#這個呢,是獲取組圖套圖的代碼啦扬,是下一個需要顯示的代碼塊
import meizi_series_getpage
#同樣的中狂,這里是加載鏈接防超時,和上一節(jié)一樣
def loadurl(url):
    try:
        conn = urllib2.urlopen(url, timeout=5)
        html = conn.read()
        return html
    except urllib2.URLError:
        return ""
    except Exception:
        print("unkown exception in conn.read()")
        return ""

#上述代碼中扑毡,最后還有一個except Exception胃榕,用于處理URLErro類無法捕捉的其他異常。感謝實驗樓用戶@caitao瞄摊。

#下面的這個path指的是保存本地的文件路徑勋又,我在第一小節(jié)已經(jīng)講過了,還記得么泉褐?跟著代碼再將一次吧
def nextpage(url,path):
    reNextLink = "<a.*?href='(.*?)'>.*?</a>"
    #獲取reNextPage里的標簽的全部鏈接
    reNextPage = '<div.*?id="wp_page_number.*?>.*?<ul>(.*?)</ul>'
    #獲取ul標簽里面的內(nèi)容,里面包含了所有我們需要的鏈接鸟蜡,找到wp_page_number就可以了
    #下面目的是獲取鏈接名膜赃,組合傳入路徑得到當前路徑名,解釋:匹配a到z字符揉忘,>=1個
    searchPathTail = '.*/([a-z]+).*?.html'
    #獲取傳入的鏈接尾巴
    searchurltail = '.*/(.*?.html)'
    #獲取傳入的鏈接頭部
    searchhead = '(.*)/.*?.html'
    #分開頭和尾跳座,是因為在獲取當前標簽的所有頁碼,都不是完整的泣矛,而是尾部鏈接疲眷,需要用尾部和頭部鏈接拼湊成完整的鏈接。頭部鏈接您朽,就是傳入鏈接的頭部狂丝,而且傳入的是第一個完整鏈接,頁面1里面又沒有尾部鏈接哗总,所有傳入鏈接的尾部几颜,也需要找出
    pathTail = re.findall(searchPathTail,url,re.S)
    urlTail = re.findall(searchurltail,url,re.S)
    urlhead = re.findall(searchhead,url,re.S)
    #從傳入文件夾路徑和從鏈接中分析出的文件名,得到當前文件夾路徑讯屈,保存到path中
    path = path + '/' +pathTail[0]
    print path
    #標簽頁面的存儲列表nextpage
    nextpageurl = []
    html = ''
    while True:
        html = loadurl(url)
        if html == '':
            print 'load', url,'error'
            continue
        else:
            break
    nextPage = re.findall(reNextPage,html,re.S)
    nextLink = re.findall(reNextLink,nextPage[0],re.S)
    nextLink.append(urlTail[0])
    #這一段是將標簽頁碼的所有尾部鏈接保存到nextLink中蛋哭,然后下面的for循環(huán),將完整的url鏈接涮母,存儲到nextpageurl中
    nextLink = sorted(list(set(nextLink)))
    for i in nextLink:
        nextpageurl.append(urlhead[0]+"/"+i)
    #將url鏈接和對應(yīng)的文件路徑傳入"獲取標簽第n頁的所有組圖鏈接"的模板中谆趾,引號標記的躁愿,就是下一個代碼塊
    for i in nextpageurl:
        print i
        meizi_series_getpage.tag_series(i,path)

第二個代碼塊

#文件名:meizi_series_getpage
import re
import urllib2
import meizi_page_download

def loadurl(url):
    #依舊的,防超時和循環(huán)加載
    try:
        conn = urllib2.urlopen(url,timeout=5)
        html = conn.read()
        return html
    except urllib2.URLError:
        return ''
    except Exception:
        print("unkown exception in conn.read()")
        return ''
        
#這個函數(shù)沪蓬,簡單點就是根據(jù)套圖鏈接和傳入的路徑彤钟,得到套圖文件夾路徑,再傳給上一節(jié)的圖片下載模板
def oneOfSeries(urllist,path):
    searchname = '.*/(.*?).html'
    current_path = '' 
    for url in urllist:
        try:
            name = re.findall(searchname,url,re.S)
            current_path = path + '/' + name[0]
            meizi_page_download.picurl(url,current_path)
        except urllib2.URLError:
            pass

#傳入標簽的第n頁和文件夾路徑怜跑,獲取所有套圖url鏈接样勃,和分析出對應(yīng)的文件夾路徑,傳給我們底層的圖片下載模板(也就是上一節(jié)啦)
def tag_series(url,path):
    #這里是直接匹配出套圖的鏈接性芬,直接峡眶,注意是直接,最好是將結(jié)果和源碼對下結(jié)果植锉,防止遺漏和多出
    reSeriesList = '<div .*?class="pic".*?>.*?<a.*?href="(.*?)".*?target.*?>'
    html = ''
    while True:
        html = loadurl(url)
        if html == '':
            print 'load', url,'error'
            continue
        else:
            break
    seriesList = re.findall(reSeriesList,html,re.S)
    if len(seriesList) ==0:
        pass
    else:
        oneOfSeries(seriesList,path)

實驗樓環(huán)境運行截圖辫樱,奉上:


實驗樓運行截圖(第三小節(jié))
實驗樓運行截圖(第三小節(jié))

四、總結(jié)

一共四步:

  • 從傳入的文件夾路徑和標簽鏈接俊庇,得到當前標簽的文件夾路徑
  • 從傳入的標簽鏈接狮暑,得到所有的標簽頁的url鏈接
  • 從傳入的標簽第n頁的url鏈接,得到所有的套圖url鏈接
  • 從套圖url鏈接和傳入的文件夾路徑辉饱,得到套圖的文件夾路徑
  • 將套圖文件夾路徑和套圖的url鏈接搬男,傳給圖片下載的模板(上一節(jié)我們完成的那個代碼文件)
    本節(jié)到此結(jié)束了,下一節(jié)就是"高層:從頂層域獲取所有的標簽頁"彭沼,基礎(chǔ)爬蟲的最后一個...

Follow me, let's go...

Python3教程缔逛、項目網(wǎng)站--傳送門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市姓惑,隨后出現(xiàn)的幾起案子褐奴,更是在濱河造成了極大的恐慌,老刑警劉巖于毙,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敦冬,死亡現(xiàn)場離奇詭異,居然都是意外死亡唯沮,警方通過查閱死者的電腦和手機脖旱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來介蛉,“玉大人夯缺,你說我怎么就攤上這事「使ⅲ” “怎么了踊兜?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長佳恬。 經(jīng)常有香客問我捏境,道長于游,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任垫言,我火速辦了婚禮贰剥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘筷频。我一直安慰自己蚌成,他們只是感情好,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布凛捏。 她就那樣靜靜地躺著担忧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪坯癣。 梳的紋絲不亂的頭發(fā)上瓶盛,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機與錄音示罗,去河邊找鬼惩猫。 笑死,一個胖子當著我的面吹牛蚜点,可吹牛的內(nèi)容都是我干的轧房。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绍绘,長吁一口氣:“原來是場噩夢啊……” “哼奶镶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起脯倒,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤实辑,失蹤者是張志新(化名)和其女友劉穎捺氢,沒想到半個月后藻丢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡摄乒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年悠反,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馍佑。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡斋否,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拭荤,到底是詐尸還是另有隱情茵臭,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布舅世,位于F島的核電站旦委,受9級特大地震影響奇徒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缨硝,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一摩钙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧查辩,春花似錦胖笛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谬返,卻和暖如春之斯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遣铝。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工佑刷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人酿炸。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓瘫絮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親填硕。 傳聞我的和親對象是個殘疾皇子麦萤,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)扁眯,斷路器壮莹,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 知識儲備绣版,簡單爬蟲的必知必會胶台,【核心】 一、實驗說明 1. 環(huán)境登錄 無需密碼自動登錄杂抽,系統(tǒng)用戶名shiyanlo...
    布拉豆閱讀 459評論 0 0
  • HTML標簽解釋大全 一诈唬、HTML標記 標簽:!DOCTYPE 說明:指定了 HTML 文檔遵循的文檔類型定義(D...
    米塔塔閱讀 3,240評論 1 41
  • 高層:從頂層域獲取所有的標簽頁 一铸磅、實驗說明 1. 環(huán)境登錄 無需密碼自動登錄,系統(tǒng)用戶名shiyanlou 2....
    布拉豆閱讀 304評論 0 0
  • 時間到底值不值錢呢? 剛剛聽到一個廣告說的是游戲阅仔,你的時間非常值錢济竹,我在XX等你。 這個游戲是剛上市的霎槐,就是說先去...
    安梓閱讀 1,178評論 0 1