目錄
* 前言 <https://www.cnblogs.com/bigsai/p/11438619.html#前言>
* 分析 <https://www.cnblogs.com/bigsai/p/11438619.html#分析>
* 理想狀態(tài) <https://www.cnblogs.com/bigsai/p/11438619.html#理想狀態(tài)>
* 爬蟲(chóng)實(shí)現(xiàn) <https://www.cnblogs.com/bigsai/p/11438619.html#爬蟲(chóng)實(shí)現(xiàn)>
* 其他注意 <https://www.cnblogs.com/bigsai/p/11438619.html#其他注意>
* 效果與總結(jié) <https://www.cnblogs.com/bigsai/p/11438619.html#效果與總結(jié)>
@(文章目錄)
前言
在我們寫(xiě)文章(博客、公眾號(hào)、自媒體)的時(shí)候,常常覺(jué)得自己的文章有些老土,這很大程度是因?yàn)榕鋱D沒(méi)有選好。
筆者也是遇到相同的情況,順便解決其中一個(gè)案例,給大家一些技術(shù)上的參考和借鑒!
并且,我們搜圖片如果去百度,會(huì)遇到兩種情況:非高清或者帶水印。這都是我們所忌諱的東西。筆者此次通過(guò)圖蟲(chóng)創(chuàng)意抓起高清小圖,雖然不是大圖,
但是在火熱的移動(dòng)端閱讀上是足夠的!
分析
廢話說(shuō)完了,我們開(kāi)始分析怎么樣才能獲取這樣的圖片呢。
理想狀態(tài)
* 我們的理想狀態(tài)就是一個(gè)網(wǎng)頁(yè),我們的目標(biāo)網(wǎng)頁(yè),把圖片<img src="xxxxxx">直接放到html中。我們的爬蟲(chóng)可以直接解析。這種情況,
就像你寫(xiě)的博客,個(gè)人網(wǎng)站的圖片一樣,簡(jiǎn)單嵌入。
*
或者就是通過(guò)后臺(tái)ajax傳輸圖片地址引用。我們不清楚是否這樣!
實(shí)際分析
但事實(shí)這種肯定會(huì)被理想破滅,因?yàn)椴豢赡?!他以圖片為核心業(yè)務(wù),要你注冊(cè),購(gòu)買等等,怎么可能就這么容易的嵌入進(jìn)入被你找到。
*
那它到底如何實(shí)現(xiàn)呢?我們分析一下!
首先打開(kāi)網(wǎng)頁(yè),檢查圖片,發(fā)現(xiàn)它的網(wǎng)頁(yè)圖片來(lái)源不唯一。有兩個(gè)主要域名ice和wel,并且后面的編號(hào)還不唯一,但是可以嘗試發(fā)現(xiàn)相同域名不同后綴的圖片地址結(jié)果相同
?。ɡ鏸cweiliimg9和icweiliimg/效果相同)。
我們發(fā)現(xiàn)原來(lái)這個(gè)搜索url會(huì)變化,但是這個(gè)查看網(wǎng)頁(yè)源代碼發(fā)現(xiàn)并沒(méi)有我們想要的圖片地址。那么我們肯定知道它要么從ajax渲染,或者就藏在js中進(jìn)行混淆或者加密
。我們發(fā)現(xiàn)這個(gè)xhr中并沒(méi)有想要的數(shù)據(jù),并且他其實(shí)藏在js中。其實(shí)這個(gè)可以猜想到的,因?yàn)樗膗rl既然跟著變化那么返回的數(shù)據(jù)肯定是有區(qū)別的。
那么分析就到這里,剩下就是python爬蟲(chóng)的模擬和解析了。
爬蟲(chóng)實(shí)現(xiàn)
前面說(shuō)到已經(jīng)知道它的數(shù)據(jù)源,我們用python編寫(xiě)爬蟲(chóng)需要進(jìn)行模擬。經(jīng)過(guò)測(cè)試發(fā)現(xiàn)它需要進(jìn)行一些驗(yàn)證,其中包過(guò)cookie的wluuid
字段(只驗(yàn)證存在,不驗(yàn)證正確性)。
那么我們編寫(xiě)一段代碼就能拿到網(wǎng)頁(yè)html。但是問(wèn)題來(lái)了。數(shù)據(jù)藏在js里面啊?。?!
我們只能用正則進(jìn)行套了!
對(duì)于這個(gè)js,我們通過(guò)js=soup.select('script') js=js[4]即可獲取。
對(duì)于有用數(shù)據(jù),只能正則截取。
pattern = re.compile(r'window.hits = (\[)(.*)(\])') va =
pattern.search(str(js)).group(2)#解析js內(nèi)容
但是這個(gè)類似json的串用,拼接我們無(wú)法直接使用spilt分組分開(kāi),但是我們可以從}全部替換成},,那么就三個(gè),,,我們就可以分割而不影響其他json串內(nèi),
;split之后每組都滿足json串格式,直接轉(zhuǎn)成json取值即可!
那么剩下拿到url直接構(gòu)造url然后下載圖片即可!
其他注意
圖片下載:
* 下載圖片有很多圖片無(wú)名稱或者名字相同,避免這個(gè)不下載要進(jìn)行編號(hào)
* 兩個(gè)url域名需要嘗試下載其中一個(gè)成功即完成下載!
爬蟲(chóng)方面
* 全程不需要登錄,下載為高清小圖。后續(xù)可以考慮研究登錄后的大圖分享給大家!
其他
* 創(chuàng)建圖片路徑要考慮路徑是否存在!
效果與總結(jié)
通過(guò)上述分析:編寫(xiě)爬蟲(chóng):
測(cè)試結(jié)果:
打開(kāi)文件夾:
發(fā)現(xiàn)nice!你只需要輸入關(guān)鍵詞即可實(shí)現(xiàn)自動(dòng)下載,雖然是小圖,但是效果不錯(cuò)!
移動(dòng)端公眾號(hào)和csdn效果!
不難發(fā)現(xiàn),整個(gè)過(guò)程就是分析和處理字符串的邏輯難點(diǎn)。數(shù)據(jù)結(jié)構(gòu)與算法扎實(shí)了處理問(wèn)題都不難,!所以,如果要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法,爬蟲(chóng)請(qǐng)關(guān)注我吧!公眾號(hào):bigsai
熱門(mén)工具 換一換
