[Java]教你網路爬蟲基本觀念及實作
開了一篇新教學,使用新的 IDE 及 方便的套件
進而從網站的內容中,截取關鍵字進行建檔
再截取其中的網址繼續爬下去
所以今天我們就拿一個網站來試驗
看看爬蟲是怎麼抓資料的
今天選的網站是鼎鼎大名的SOGO論壇
什麼??你說你不知道??嗯...不要問很可怕
我們先來講解一下最基本的觀念
你丟出去,對方丟回來
所有的網站皆是如此!!很單純
複雜的是有些網站的驗證機制不好過
這次我們使用Chrome的F12來分析網站
Step 1
開啟網站點下F12,切到Network,勾選Preserve log
Step 2
我們先從登入開始
點一下上方的登入,觀察一下右邊出現的Log
可以發現點下去的第一時間,向一個網址發送了GET請求
點進去可以看到請求的詳細內容
往下拉到底可以到看Query String Parameters
這是GET送出去的參數
之後切換到 Reponse
這是對方主機回傳回來的資料,可以看到內容是登入框的HTML碼
OK!!到這邊我們總結一下,按下登入後發生了什麼事情
- 會觸發GET要求
- 要求的網址是: http://oursogo.com/member.php
- 傳送的參數有
- mod=logging
- action=login
- referer=
- infloat=yes
- handlekey=login
- inajax=1
- ajaxtarget=fwin_content_login
- 對方丟回來一段登入框的HTML碼
看了一下參數,應該是沒有動態(每次發出去的內容都會換)的部分
如果不確定有沒有,重新整理網站後,再按一次登入
如果參數都一樣的話,代表我們只要寫死就可以了
Step 3
輸入帳號密碼後,點下登入
可以看到又對同一隻檔案發送了請求,這次的是POST
一樣點開來看一下內容
這次參數的部分多了一個 Form Data
這是使用 POST 傳送的參數,Query String是 GET 傳送的參數,兩者可以共存
這次切到 Reponse 看不到東西,因為被重新導向過
但之後我們可以用程式看,不用擔心
OK!!到這邊我們第二次總結一下,進行登入後發生了什麼事情
- 會觸發POST要求
- 要求的網址是: http://oursogo.com/member.php
- Query傳送的參數有
- mod=logging
- action=login
- loginsubmit=yes
- handlekey=login
- loginhash=L3Y53
- inajax=1
- Form傳送的參數有
- formhash=e0290946
- referer=http://oursogo.com
- username=
- password=
- questionid=0
- answer=
- loginsubmit=true
這次參數中混入了奇怪的東西 loginhash 和 formhash
這兩個很明顯的是動態產生的,這兩樣資料要怎麼來呢??
還記得上一步驟我們點下登入後有回傳了一段HTML碼嗎??
這兩樣資料就在那裡面,我們只要截取出來就好
或許會有人問:如果不在要怎麼辦!
你們只要記住
資料一定會有!!但可能在任何地方
這時候更要針對這個網頁上的所有動作進行分析
比如有沒有發送其他的要求,或是東西藏在JS當中...etc
到這邊我們已經分析完了"登入"到底做了些什麼事
Step 3
再來我們就先寫一段程式碼吧,開啟IDE後新增一個Java專案
設定一些package
article = 文章部分 http=通訊部分 login=登入部分 start=程式起點
新增一隻 Class 用來向主機發出 HTTP 要求
這隻是我之前寫好的,後面附上專案檔案
使用的是 apache http(https://hc.apache.org/)
再來在 login 中新增一個 Class Login,並規劃一些方法
之後按照上面分析好的步驟,撰寫程式
註解寫了很清楚,就不多做解釋了
Step 4
實際開一個討論區看看吧,這次的目標是爬取文章標題
奇怪!!居然出現了一個年齡限制
不用怕,一樣照上面的步驟解決這個頁面
分析完這個頁面資訊後我們一併分析文章頁面
進到文章後...
之後我們就可以看到文章標題寫在 title 標籤中
上層是一個 li 標籤,由此看來,每一個文章簡介都是一個 li
Step 5
再來我們就繼續程式碼吧,在 article 中新增一個 Class ArticleList,並規劃一些方法
Step 6
到這邊我們已經把 登入 年齡驗證 抓取標題 實作完畢了
再來就是在 start 中新增一個 Class Start 來測試結果
大成功
總結
我們學到了如何使用 Chrome F12 工具來幫助我們分析 HTTP
也學習到了平常瀏覽網站時,瀏覽器到底幫我們做了什麼事情
爬蟲就是另一種瀏覽器,但爬回來的就是冷冰冰的程式碼
但在這邊呼籲,沒事不要去亂爬別人的東西,會讓對方的主機增加負擔