寫爬蟲之前,首先要明確爬取的數據。然後,思考從哪些地方可以獲取這些數據。下麵以一個實際案例來說明,怎麼尋找一個好的爬蟲策略。(代碼僅供學習交流,切勿用作商業或其他有害行為) 1).方式一:直接爬取網站 目標網址:http://chanyouji.com/ 註意:這個網站會攔截IP,訪問次數過多...
寫爬蟲之前,首先要明確爬取的數據。然後,思考從哪些地方可以獲取這些數據。下麵以一個實際案例來說明,怎麼尋找一個好的爬蟲策略。(代碼僅供學習交流,切勿用作商業或其他有害行為)
1).方式一:直接爬取網站 目標網址:http://chanyouji.com/ 註意:這個網站會攔截IP,訪問次數過多,IP會被封,所以,上節的IP代理就用到了。
a).打開網頁,可以看到這是一個游記類的網站,裡面有很多人分享的游記。那我們就爬這些游記。說不定以後有時間出去玩的時候可以用到。
b).點開其中一篇游記,可以看到鏈接地址形式是這樣的 http://chanyouji.com/trips/352140,這個時候,我們可以思考一下,352140這個數字代表的含義,會不 會是這個游記在資料庫的ID,如果是的話,換個數字會不會得到不一樣的游記,那麼我們試一下。訪問 http://chanyouji.com/trips/352141,可以看到,的確得到了不 一樣的游記。截圖如下:
c).從網址上可以得出一個結論,我們可以通過枚舉來請求到不同的數據。但是,這並不一定是可以按照上兩節的方式來爬取。原因有很多。比如,有些數據是通過js渲染 的。對於有web開發基礎的很好理解,但是對於沒有做過web開發的同學解釋一下。假設,我們要買一個房子,房子有很多種,我們分成兩類,一類是毛坯房(就是沒有裝修 的),一類是裝修好的。對於毛坯房,我們要買傢具,裝修什麼的,對於裝修好的我們可以直接用。類比到這個例子中,http://chanyouji.com/trips/*****這個請求就買 一個房子,毛坯房就是說返回的是這個網站的殼子,需要另外在JS裡面重新請求數據,填充到殼子裡面。裝修好的就是,數據什麼的都填好了,一起給你。
d).那麼我們該如何判斷,這兩類的結果呢。很簡單。以火狐瀏覽器為例,F12打開調試視窗,找到網路->點擊相應的請求,可以看到如下界面:
這個請求的所有的數據都會顯示在這個裡面,然後點開響應,會看到請求來的源代碼(這個也是我們用爬蟲發請求的結果),如圖所示
很慶幸,我們獲取到的是精裝房,可以直接利於上兩節的知識來解析這個代碼(這裡就不贅述了)
e).如果是js渲染的怎麼辦呢?我沒在這個網站上找到用js渲染的(這個網站的數據還是比較好爬,除了攔截IP之外,沒有多少難度),所以換個目標來解釋。
2) 方式二:分析請求 目標網址:http://music.163.com/#/user/home?id=48353(丁磊的網易雲音樂個人主頁)開始分析方法和上一步一樣,頁面截圖如下:
a).我們發現,http://music.163.com/user/home?id=48353 這個請求返回的值是不是少點什麼,對的,就是少了歌單(如果多分析幾個用戶的頁面,你會發現,年齡 也是缺的)
b).我們繼續尋找那個歌單的數據在哪裡?