php爬蟲——以爬取圖片為例
- 分析目標源所有url
- 抓取URL
- 分析內容
- 入庫
1.分析目標源所有url
此處發現,
頻道的url為
圖片詳情頁的url為
注意,此網站頻道詳情頁運用非同步無限載入方式載入所有blog,隨著scrollbar的滾動,會通過api繼續請求文章,返回的是json檔案。
非同步載入blog的api為
2.抓取url
一般的抓取url的思路是通過分析頁面的html結構,找到特定結構位置上的連結,通過get請求訪問該連結,進入到詳情頁,再獲取內容。
但是這個網站就不需要如此麻煩的操作,原因有如下幾點:
-
網站文章詳情頁內容和頻道列表內容完全一致,都是圖片+
-
網站雖然有翻頁按鈕,但是無限載入的json檔案可以不需要出發翻頁就能請求到所有資料
-
非同步請求返回的json檔案內有我們需要的所有內容,包括圖片描述與圖片地址
所以只需要不停的請求非同步api就能夠爬取到圖片。下面我們來分析一下api。
由於其中有json_encode()的中文符號,我們把這段url放到瀏覽器裡看一下
放大url部分
我們可以看到很多引數,再和其他url對比後發現,
影響獲取到的json檔案內容的引數有:
- filter_id=時尚搭配_搭配達人//按照<大分類>_<小分類>的格式經過json_encode()後得到
- start=24//這是分頁數目,一頁有25
- _=1518201178347//這是大概是一個時間戳,且末尾的數字隨api請求詞數遞增,每次加1。並且沒有這個引數也能請求到資料。但是還是帶上比較好,防止請求過期和被網站限制請求次數
3.分析內容
也就是說,我們可以通過更改以上三個引數,獲取到json檔案封裝好的所有資料!我們把其中一個json檔案取出來看一下它的結構:
可以看到,limit引數表示了json中item的數目,
object_list下的msg是我們需要的圖片描述資訊,
object_list下的photo中的path是我們需要的圖片地址,
至此我們需要爬取的圖片資訊全部獲取到。
4.整理入庫
其實整個爬蟲過程中,最需要時間的是嗅探url
整理入庫需要根據表結構在提取出有用的資訊,再統一封裝好存入資料庫,這是一個很繁瑣的過程。不過本次圖片爬取先不細究改進入庫和統一入庫標準的操作,只研究到獲取到檔案為止。
我們已經有了圖片的地址,那麼如何將圖片批量下載到本地呢?
在php中,只需呼叫file_get_contents()方法和file_put_contents()方法就可以了。
前者將檔案讀入到一個字串中,地址可以填寫網路地址;後者將字串寫進檔案。
$img = file_get_contents($path);
file_put_contents(‘檔名’,$img);
用這兩個核心語句就可以下載圖片到本地了~!