爬取教務處網(wǎng)站

最近寫了一個課程助手類Android App,寫了一大半的時候發(fā)現(xiàn)這個課程助手適用于低頻用戶場景,如果做一個App反倒不如做成微信公眾號。頓時喪失了一半寫下去的毅力。那就停下來,把爬取教務處和一些類似網(wǎng)站的過程記錄下來。

登錄

成功登錄教務處網(wǎng)站是拿到后續(xù)數(shù)據(jù)的關鍵。首先需要知道POST的數(shù)據(jù)格式。如果有驗證碼則要爬取驗證碼,識別之后,攜帶參數(shù)進行POST。在這之中一定要保持在同一會話中,也就是緩存cookie。登錄成功后的cookie是獲取之后數(shù)據(jù)的憑證。我常用的網(wǎng)絡庫為okhttp3,在okhttp3中cookie可以在okhttpclient創(chuàng)建的過程中配置。例如


okhttp3

在saveFromResponse和loadForRequest中分別緩存和提取cookie

在緩存cookie這一塊是要根據(jù)不同網(wǎng)站來設置的,可能在同一個host不同的path下需要使用同一個cookie。如果使用Map來緩存cookie那就不能簡單地用HttpUrl來作為key,否則就可能因為不在同一會話中導致驗證碼無法通過。

很多教務處的網(wǎng)站的登錄并沒有做的復雜,只需要簡單的POST模擬,注意下緩存cookie就可以繼續(xù)其他頁面的獲取。


解析

拿到數(shù)據(jù)之后,下一步就是從html頁面中解析出想要的數(shù)據(jù)。我用過的頁面解析包郵Jsoup和HtmlUnit。相比較Jsoup更加輕量化。Jsoup有很多很強大的API來幫助操作DOM,CSS,對于復雜的結構還可以使用選擇器(selector)來提取,但一些網(wǎng)站會異步加載數(shù)據(jù),這樣會導致拿到的html頁面并不是最終和在瀏覽器中看到一致,數(shù)據(jù)也不全。這時候就要用另一大利器HtmlUnit,它支持JS,CSS,所以操作HtmlUnit就像操作一個瀏覽器一樣簡單。htmlunit

有了利器,就要學著用了。提取復雜數(shù)據(jù)Jsoup可以使用選擇器,HtmlUnit可以使用Xpath。selector和xpath的語法很簡單,當然你也可以不學,為什么呢?

因為Chrome可以幫你!

例如

復雜的微博界面

對于如此復雜的界面,只需要:

移動鼠標到想要的數(shù)據(jù)上 -> 然后輕輕點擊鼠標右鍵 -> 看到COPY復選框 -> 會出現(xiàn)copy as selector 和 copy as xpath。

對于教務處頁面的提取,可以看做是爬蟲的入門。如果要提取微博這樣的復雜地頁面,建議從移動端入口,移動端的頁面更容易爬取和解析。附一個之前寫的垃圾demo /捂臉 垃圾demo??


最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,068評論 25 709
  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,810評論 11 349
  • 昨天,快滿50歲的朱麗倩被曝已有4個月身孕,據(jù)說是通過定期人工受孕終于成功。一時間輿論嘩然,縱橫江湖三十多年公認的...
    林叨叨閱讀 573評論 5 5
  • 我和她是大學同學,也算得上是所謂的基友的,鬧騰的時候,活脫脫的像個傻子。突然有事惹她不高興或者反感就冷漠的像個陌生...
    解憂小屋閱讀 233評論 0 0
  • 那個老頭兒,是在聽雨嗎?我也不清楚。 剛剛離職的我,從未有過的放松,等同事們下了班,終于可以安心地可以和他們一起邊...
    李小蕊_lindery閱讀 288評論 2 2

友情鏈接更多精彩內(nèi)容