基於驗證碼模擬登錄的爬蟲

上一篇博客我們講到沒有驗證碼的登陸跳轉和信息抓取,對於部分有驗證碼登陸跳轉我們又該怎麼做到模擬登陸呢。
首先,還是先說下我們的外部庫
外部資源庫
我們這次模擬登陸的是拉手網。
http://www.lashou.com/account/login/
然後我們查看服務器驗證碼的網址:
獲得網址
當然這樣查看得到的是相對地址,我們肯定要得到絕對地址才能獲取到驗證碼的圖片,下面的代碼會給出如何直接獲取絕對地址。
Po出函數

 public static void downloadFile() throws IOException {
            String url="http://www.lashou.com/account/login/";
            //存入的文件路徑和文件名
            String fileName="D:\\TDDOWNLOAD\\yz.png";
            File dir = new File("D:\\TDDOWNLOAD");
            if(!dir.exists())
            {
                dir.mkdirs();               
            }
            Connection connection=Jsoup.connect(url);
            Document document=connection.get(); 
            String src=document.getElementsByClass("yzmimg").attr("abs:src");
            //Jsoup的文件流讀取
            URL url_picture=new URL(src);
            InputStream inputStream =url_picture.openStream();
            OutputStream out = new BufferedOutputStream(new FileOutputStream( fileName));
               for (int b; (b = inputStream.read()) != -1;) {
                   out.write(b);
               }
               out.close();
               inputStream.close(); 

        }

然後我們可以看到在自己D盤的目錄下會有
下載獲得的驗證碼
接下來就是獲得輸入,我只是做個示範,所以就不把驗證碼顯示出來,JAVA可以通過Swing動態顯示這張圖片,JSP可以通過文件獲得等等,我們就在這裏寫出了。

 public static String GetYZM(){
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("請輸入下載下來的驗證碼中顯示的數字...");
    String yzm = br.readLine();
    return yzm;
}

接下來就是和上一篇博客相同的操作,我就不做演示。 最後講解一下上一期忘記講解的Cookie方面的問題。
上一篇有個代碼:

   String accountCookie=connection.response().cookie("ACCOUNT");

那麼這個ACCOUNT有什麼講究呢
看圖
Cookie
必須與上面的參數名完全一致才能獲取到你想要的Cookie.

至於大型網站的Cookie值有很多,如何正確的使用CookieStore,我會在後續進階篇中詳細的介紹。

發佈了36 篇原創文章 · 獲贊 51 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章