很久沒更新簡書了, 今天更新一點(diǎn)關(guān)于爬蟲的東西
spiders
1. 爬取boss直聘上的Python崗位
構(gòu)造URL, 獲取網(wǎng)頁上的數(shù)據(jù), 解析URL, 獲取需要的信息存入字典
2. 爬取蘑菇街網(wǎng)站上所有種類的商品(未去重)
爬取蘑菇街網(wǎng)站上的所有商品比較復(fù)雜, 想獲取全部的商品, 突破口就是商品的種類.
- 首先隨便選取一個商品種類,點(diǎn)進(jìn)去后,可以發(fā)現(xiàn)這里面直接就會出現(xiàn)很多商品
- 蘑菇街并沒有使用url進(jìn)行分頁處理, 更多的數(shù)據(jù)是放在一個個XHR文件中的list.mogujie.com/search?
(獲取這個文件, 你可以使用Chrome打開開發(fā)者模式,在Network中, 你向下滑動, 頁面就會加載新的元素, 帶有數(shù)據(jù)的文件就找到了)
- 蘑菇街并沒有使用url進(jìn)行分頁處理, 更多的數(shù)據(jù)是放在一個個XHR文件中的list.mogujie.com/search?
- 我們會發(fā)現(xiàn)這個文件后面跟的參數(shù), 就是對應(yīng)的商品的分類,有很大一部分參數(shù)是沒用的, 所以可以自己剔除掉,方便后面自己構(gòu)建URL. 我發(fā)現(xiàn)區(qū)分種類的參數(shù)是'fcid'后面跟的參數(shù), 所以就去尋找該參數(shù)在哪里出現(xiàn)的.
- 分析得出, 商品種類應(yīng)該是和首頁里面的欄目里面的數(shù)據(jù)是對應(yīng)的 所以去蘑菇街首頁找到存放所有種類的'fcid'的文件(mce.mogucdn.com/jsonp/multiget/3?pids=110119), 這樣就可以得到所有的種類了.
- 循環(huán)遍歷,構(gòu)造單個種類頁面的URL. 同一種類的商品是通過改變page來實(shí)現(xiàn)頁面加載的, 所以將頁面page與種類fcid一起傳入url, 就能得到商品的詳細(xì)信息.
- 通過python連接數(shù)據(jù)庫, 構(gòu)造SQL語句,將爬取的內(nèi)容存入數(shù)據(jù)庫(數(shù)據(jù)量有點(diǎn)大,我最終爬了下來的數(shù)據(jù)共2107275條(未去重))
蘑菇街?jǐn)?shù)據(jù).png
3. 爬取蝦米音樂排行榜前100的歌曲(下載)
- 凱撒密碼
通過URL打開蝦米音樂的排行榜, 進(jìn)入開發(fā)者模式, 找到歌曲信息的位置.
網(wǎng)頁構(gòu)成中, 有一個table里面的tr有'data-mp3'屬性.
應(yīng)該能猜到, 歌曲的數(shù)據(jù)應(yīng)該就和這個有關(guān)系了, 但是這里面的文字雜亂無章, 很明顯不是歌曲的直接URL
該地址是加密過的, 通過凱撒密碼解密,能得到它真正的URL
獲取到歌曲地址的url就能直接解析歌曲了, 然后通過二進(jìn)制存儲該數(shù)據(jù), 就能把歌曲下載下來了
4. 破解1KKK漫畫的圖像旋轉(zhuǎn)點(diǎn)擊驗(yàn)證
1kkk驗(yàn)證碼.png
1KKK漫畫網(wǎng)站, 登錄注冊時是通過點(diǎn)擊動漫人物頭像,使頭像轉(zhuǎn)正后完成驗(yàn)證. 每次點(diǎn)擊, 圖像會順時針旋轉(zhuǎn)90°.
但是電腦并不能自己識別圖像的正反, 所以涉及到簡單的機(jī)器學(xué)習(xí).
首先去查看圖像驗(yàn)證碼的地址, 發(fā)現(xiàn)每個頭像都是由四個不同方向的小圖組成.
通過對圖像地址的URL的反復(fù)調(diào)用,可以得到新的圖像.所以, 循環(huán)執(zhí)行url,盡可能得到驗(yàn)證碼圖庫里面的頭像.
裁剪獲得小頭像(和驗(yàn)證碼中的頭像等大), 通過代碼去重, 去重的主要目的是為了提高代碼的執(zhí)行效率.
將所有的頭像都轉(zhuǎn)正. 通過selenium 模擬登錄, 打開界面后截取,第一張小圖, 然后和自己得到的正向頭像圖庫一一對比.
如果有相同的圖片,則說明驗(yàn)證碼圖片為正向, 不必旋轉(zhuǎn); 若比較完成后,沒有相同的圖片,模擬點(diǎn)擊該圖片一次.
后面三張驗(yàn)證碼道理同上; 若旋轉(zhuǎn)三次后, 驗(yàn)證都為通過, 則有可能是圖庫中的頭像沒有獲取完全, 此時模擬點(diǎn)擊換一組, 重新執(zhí)行驗(yàn)證
1kkk驗(yàn)證碼(正).png