靜態(tài)網(wǎng)頁爬取:批量獲取高清壁紙

前言

本文的文字及圖片來源于網(wǎng)絡,僅供學習、交流使用,不具有任何商業(yè)用途,如有問題請及時聯(lián)系我們以作處理编饺。

PS:如有需要Python學習資料的小伙伴可以加點擊下方鏈接自行獲取

python免費學習資料暮顺、代碼以及交流解答點擊即可加入

本來想爬pexel上的壁紙厅篓,然而發(fā)現(xiàn)對方的網(wǎng)頁不知道設置了什么,反正有反爬蟲機制捶码,用python訪問直接Fobbiden羽氮!真小氣qwq
最后還是乖乖去爬zol上的壁紙了

Before:

在設計爬蟲項目的時候,首先要在腦內(nèi)明確人工瀏覽頁面獲得圖片時的步驟

一般地惫恼,我們?nèi)ゾW(wǎng)上批量打開壁紙的時候一般操作如下:

  • 1档押、打開壁紙網(wǎng)頁
  • 2、單擊壁紙圖(打開指定壁紙的頁面)
  • 3祈纯、選擇分辨率(我們要下載高清的圖)
  • 4令宿、保存圖片

實際操作時,我們實現(xiàn)了如下幾步網(wǎng)頁地址的訪問:打開了壁紙的網(wǎng)頁→單擊壁紙圖打開指定頁面→選擇分辨率腕窥,點擊后打開最終保存目標圖片網(wǎng)頁→保存圖片

在爬蟲的過程中我們就嘗試通過模擬瀏覽器打開網(wǎng)頁的操作粒没,一步步獲得、訪問網(wǎng)頁簇爆、最后獲得目標圖片的下載地址革娄,對圖片進行下載保存到指定路徑中

這些中間過程中網(wǎng)頁的一些具體篩選條件的構造,需要打開指定頁面的源代碼去觀察和尋找包含有目的鏈接的標簽

具體實現(xiàn)項目與注釋

這里我只想獲得一些指定的圖片冕碟,所以我先在網(wǎng)頁上搜索“長門有侠雇铮”,打開了一個搜索結果頁面安寺,發(fā)現(xiàn)在這個頁面上就已經(jīng)包含了同類型的其他壁紙鏈接厕妖,于是我一開始就把最初訪問的目的地址設置為這個搜索結果頁面

目標結果頁面截圖:


圖中下標為"1/29"."2/29"為其他同類型目標壁紙,通過點擊這些圖片我們可以打開新的目標下載圖片頁面

這里我們查看一下網(wǎng)頁源代碼


圖中黃色底的地方就是打開這些同類壁紙的目的地址(訪問的時候需要加上前綴"http://desk.zol.com.cn")

現(xiàn)在我們可以嘗試實現(xiàn)構建爬蟲:

打開指定頁面→篩選獲得所有長門有希壁紙的目標下載頁面鏈接

代碼如下:

 1 from urllib import request,error
 2 import re
 3 
 4 url = "http://desk.zol.com.cn/bizhi/561_5496_2.html"
 5 
 6 try:
 7         response = request.urlopen(url)# 打開頁面
 8         html = response.read() #此時是byte類型
 9         html = str(html) # 轉換成字符串
10 
11         pattern = re.compile(r'<a.*? href="(.*?)".*?>.*?</a>')
12         imglist = re.findall(pattern,html) # 匹配<a>標簽中的href地址
13         truelist = []
14         for item in imglist:
15             if re.match(r'^\/bizhi\/561_',item): # 觀察到所有目的地址下載頁面前綴都是/bizhi/561_挑庶,通過match函數(shù)進行篩選
16                 truelist.append(item)# 篩選掉其他無關的頁面(把真的目標頁面加到truelist列表中)
17 except error.HTTPError as e:
18         print(e.reason)
19 except error.URLError as e:
20         print(e.reason)
21 except:
22         pass

獲得地址以后我們可以通過獲取地址→打開指定頁面→選擇分辨率→獲得目的下載地址→保存到本地指定路徑中

在測試的時候我輸出了一下上一步truelist中保存的內(nèi)容



可以看到保存的只是一個后綴言秸,在訪問的時候我們需要加上一個指定的前綴
實現(xiàn)代碼如下(注釋見代碼):

 1 # 對于每一張地址软能,抓取其地址并且下載到本地
 2 x=0
 3 for wallpaperpage in truelist:
 4     try:
 5         # print(wallpaperpage)
 6         url1 = "http://desk.zol.com.cn" + wallpaperpage
 7         response1 = request.urlopen(url1) # 打開壁紙的頁面,相當于在瀏覽器中單擊壁紙名
 8         html1 = response1.read()
 9         html1 = str(html1)
10         pattern1 = re.compile(r'<a.*?id="1920x1080" href="(.*?)".*?>.*</a>')
11         urllist = re.findall(pattern1,html1) #匹配<a>標簽中的id為1920 * 1080的地址举畸,相當于在瀏覽器中選擇1920*1080分辨率
12         html2 = str(request.urlopen("http://desk.zol.com.cn"+urllist[0]).read()) # 打開網(wǎng)頁
13 
14         pattern2 = re.compile(r'<img.*? src="(.*?)"')
15         wallpaperurl = re.findall(pattern2,html2) # 用于獲取高清圖片的地址
16 
17         request.urlretrieve(wallpaperurl[0],"E://walkingbug/chapter1pic/%r.jpg" % x)
18         x+=1
19     except error.HTTPError as e:
20         print(e.reason)
21     except error.URLError as e:
22         print(e.reason)
23     except:
24         pass

最后可以在自己的目標文件夾中看到爬下來的圖片集~



其他:

對上面代碼出現(xiàn)的一些函數(shù)作用加以解釋:
request.urlopen(url):用于獲取url網(wǎng)頁的源代碼內(nèi)容信息查排,相當于模仿瀏覽器打開這個頁面
response.read():打印出源代碼的內(nèi)容
pattern = re.compile(r'<a.? href="(.?)".?>.?'):對正則表達式進行預編譯</a.
imglist = re.findall(pattern,html):在html中搜尋有無與pattern內(nèi)容相匹配的字符串,保存括號內(nèi)的內(nèi)容抄沮,(黃色底內(nèi)的內(nèi)容)
這兩段實際上等價于imglist = re.findall(r'<a.? href="(.?)".?>.?',html)</a.
其實當匹配次數(shù)很高的時候跋核,有無預編譯的正則表達式匹配速度會有明顯的差距,所以盡可能使用compile()預編譯之后再進行正則表達式的匹配
request.urlretrieve(wallpaperurl[0],"E://walkingbug/chapter1pic/%r.jpg" % x):用于把目標文件下載保存到指定路徑中

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叛买,一起剝皮案震驚了整個濱河市砂代,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌率挣,老刑警劉巖刻伊,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異椒功,居然都是意外死亡捶箱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門动漾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讼呢,“玉大人,你說我怎么就攤上這事谦炬≡闷粒” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵键思,是天一觀的道長础爬。 經(jīng)常有香客問我,道長吼鳞,這世上最難降的妖魔是什么看蚜? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮赔桌,結果婚禮上供炎,老公的妹妹穿的比我還像新娘。我一直安慰自己疾党,他們只是感情好音诫,可當我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雪位,像睡著了一般竭钝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天香罐,我揣著相機與錄音卧波,去河邊找鬼。 笑死庇茫,一個胖子當著我的面吹牛港粱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播旦签,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼查坪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了顷霹?” 一聲冷哼從身側響起咪惠,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤击吱,失蹤者是張志新(化名)和其女友劉穎淋淀,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體覆醇,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡朵纷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了永脓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袍辞。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖常摧,靈堂內(nèi)的尸體忽然破棺而出搅吁,到底是詐尸還是另有隱情,我是刑警寧澤落午,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布谎懦,位于F島的核電站,受9級特大地震影響溃斋,放射性物質發(fā)生泄漏界拦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一梗劫、第九天 我趴在偏房一處隱蔽的房頂上張望享甸。 院中可真熱鬧,春花似錦梳侨、人聲如沸蛉威。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓷翻。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間齐帚,已是汗流浹背妒牙。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留对妄,地道東北人湘今。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像剪菱,于是被迫代替她去往敵國和親摩瞎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,747評論 2 361

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