1. 程式人生 > >微醫網爬蟲(二) java實現

微醫網爬蟲(二) java實現

博主在之前的部落格(傳送門)中寫過使用爬蟲來採集微醫網的一些資訊,但是在採集醫生的歷史問診資訊時,網站卻使用了一些簡單的反爬機制阻礙我們採集這些資訊,這篇部落格主要來介紹一下如何爬取到微醫網醫生患者問診的資訊。

爬蟲在採集每一頁的資訊時,一般都會在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();