您的位置:首页 > 其它

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

2016-09-13 17:52 113 查看
上一篇博客我们讲到没有验证码的登陆跳转和信息抓取,对于部分有验证码登陆跳转我们又该怎么做到模拟登陆呢。

首先,还是先说下我们的外部库



我们这次模拟登陆的是拉手网。

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盘的目录下会有



接下来就是获得输入,我只是做个示范,所
4000
以就不把验证码显示出来,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值有很多,如何正确的使用CookieStore,我会在后续进阶篇中详细的介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: