基于验证码模拟登录的爬虫

上一篇博客我们讲到没有验证码的登陆跳转和信息抓取,对于部分有验证码登陆跳转我们又该怎么做到模拟登陆呢。
首先,还是先说下我们的外部库
基于验证码模拟登录的爬虫_第1张图片
我们这次模拟登陆的是拉手网。
http://www.lashou.com/account/login/
然后我们查看服务器验证码的网址:
基于验证码模拟登录的爬虫_第2张图片
当然这样查看得到的是相对地址,我们肯定要得到绝对地址才能获取到验证码的图片,下面的代码会给出如何直接获取绝对地址。
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盘的目录下会有
基于验证码模拟登录的爬虫_第3张图片
接下来就是获得输入,我只是做个示范,所以就不把验证码显示出来,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有什么讲究呢
看图
基于验证码模拟登录的爬虫_第4张图片
必须与上面的参数名完全一致才能获取到你想要的Cookie.

至于大型网站的Cookie值有很多,如何正确的使用CookieStore,我会在后续进阶篇中详细的介绍。

你可能感兴趣的:(爬虫,服务器,验证码,JAVA应用篇)