微醫網爬蟲(二) java實現
阿新 • • 發佈:2018-12-31
博主在之前的部落格(傳送門)中寫過使用爬蟲來採集微醫網的一些資訊,但是在採集醫生的歷史問診資訊時,網站卻使用了一些簡單的反爬機制阻礙我們採集這些資訊,這篇部落格主要來介紹一下如何爬取到微醫網醫生患者問診的資訊。
爬蟲在採集每一頁的資訊時,一般都會在url中設定pages以及每頁展示的數量,如圖所示,如果想完整地採集微醫網患者問診資訊時,必須要遍歷所有的頁數:
在一般情況下,我們只需要改變url中的與頁數有關的引數即可,如下圖所示:
但是在改變這個pageNo引數之後,發現系統根本就不認賬,並顯示沒有需要查詢的資訊。經過觀察發現後面的引數如sign何timestamp並不是不變的。每次請求的時候,這兩個引數都會發生變化。如果這兩個引數是js檔案生成的,那就比較麻煩了。不過,這兩個引數並不是實時生成的,而是在請求當前頁面時,就把下次請求的這兩個引數發過來了。如圖:
也就是說,在解析第n頁的時候,就可以把第n+1頁的這兩個引數給解析出來。
在實際程式設計實現的時候,帶上這些引數後,並沒有想要的結果。因此,應該還缺少一些其他的東西。一般情況下,大多數網站要求在請求時要帶上cookies資訊來確認一下身份。
Connection.Response res=null; try { res = Jsoup.connect("https://www.guahao.com/consultlist/89aa5e32-5609-426e-96bf-7e90d982bcca000/all").execute(); }catch (IOException e){ e.printStackTrace(); } cookies=res.cookies();
然後在請求時帶上cookies就可以得到正確的返回資訊了。
doc=Jsoup.connect(url).cookies(cookies).get();