做Java爬虫,有些感悟心得,分享给大家 _极悦注册
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 常见问题 做Java爬虫,有些感悟心得,分享给大家

做Java爬虫,有些感悟心得,分享给大家

更新时间:2019-09-29 13:42:56 来源:极悦 浏览3262次

首先,看完这篇文章,不能保证你成为大神,但是却可以让你懂得什么是爬虫,如何使用爬虫,如何利用http协议,侵入别人的系统,当然只是一些简单的教程,拿到一些简单的数据。

timg (12).jpg

先上代码,在一步一步讲解:

这是一个工具类,不用详细看,网上哪里都能找到发送http请求的工具类,少包自己导  

packagecom.df.util;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
importjava.io.PrintWriter;
importjava.net.HttpURLConnection;
importjava.net.URL;
importjava.net.URLConnection;
importjava.util.List;
importjava.util.Map;
importorg.apache.log4j.Logger;
importorg.jsoup.Connection;
importorg.jsoup.Connection.Method;
importorg.jsoup.Connection.Response;
importorg.jsoup.Jsoup;
importcom.df.controller.DFContorller;

publicclassHttpPosts{
  privatefinalstaticLoggerlogger=Logger.getLogger(DFContorller.class);
  publicstaticStringsendPost(Stringurl,Stringparam){
  PrintWriterout=null;
  BufferedReaderin=null;
  Stringresult="";
  try{
  URLrealUrl=newURL(url);
  //打开和URL之间的连接
  URLConnectionconn=realUrl.openConnection();
  //设置通用的请求属性
  conn.setRequestProperty("accept","*/*");
 conn.setRequestProperty("connection","Keep-Alive");
  conn.setRequestProperty("user-agent",
  "Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)");
  //发送POST请求必须设置如下两行
  conn.setDoOutput(true);
  conn.setDoInput(true);
  //获取URLConnection对象对应的输出流
  out=newPrintWriter(conn.getOutputStream());
  //发送请求参数
  out.print(param);
  //flush输出流的缓冲
  out.flush();
  //定义BufferedReader输入流来读取URL的响应
  in=newBufferedReader(
  newInputStreamReader(conn.getInputStream(),"utf-8"));
  Stringline;
  while((line=in.readLine())!=null){
  result+=line;
  }
  }catch(Exceptione){
  logger.info("发送POST请求出现异常!"+e);
  e.printStackTrace();
  }
  //使用finally块来关闭输出流、输入流
  finally{
  try{
  if(out!=null){
  out.close();
  }
  if(in!=null){
  in.close();
  }
  }
  catch(IOExceptionex){
  ex.printStackTrace();
  }
  }
  returnresult;
  }
  publicstaticStringsendGet(Stringurl,Stringparam){
  Stringresult="";
  BufferedReaderin=null;
  try{
  StringurlNameString=url+"?"+param;
  URLrealUrl=newURL(urlNameString);
  //打开和URL之间的连接
  URLConnectionconnection=realUrl.openConnection();
  //设置通用的请求属性
  connection.setRequestProperty("accept","*/*");
  connection.setRequestProperty("connection","Keep-Alive");
  connection.setRequestProperty("user-agent",
  "Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)");
  connection.setRequestProperty("Cookie","PHPSESSID=27roc4d0ccd2cg4jbht80k8km2");
  //建立实际的连接
  connection.connect();
  //获取所有响应头字段
  Map<String,List<String>>map=connection.getHeaderFields();
  //遍历所有的响应头字段
  for(Stringkey:map.keySet()){
  System.out.println(key+"--->"+map.get(key));
  }
  //定义BufferedReader输入流来读取URL的响应
  in=newBufferedReader(newInputStreamReader(
  connection.getInputStream(),"utf-8"));
  Stringline;
  while((line=in.readLine())!=null){
  result+=line;
  }
  }catch(Exceptione){
  System.out.println("发送GET请求出现异常!"+e);
  e.printStackTrace();
  }
  //使用finally块来关闭输入流
  finally{
  try{
  if(in!=null){
  in.close();
  }
  }catch(Exceptione2){
  e2.printStackTrace();
  }
  }
  returnresult;
  }
  }

---------------------------------------分割线

下面进入主题:首先你要先进入,你要去爬取网站的登录页面,查看页面源码,找到登录请求发送的方法名;一般来所,小型网站会直接写在from表面action里面,很容易找得到,中型的网站就不会写的这么直接了,找起来要费些功夫,可能在js里面,也可能不在这个页面,推荐使用抓包工具登陆一次,看抓到的请求信息,大型的网站,本人爬取过的京东商城后台,用游览器自带的f12,抓不到登录的信息,一闪即逝,最后想了很多招才搞到京东的登录接口;实现爬去;拿到了登录接口地址后。上代码

Stringdata=HttpPosts.sendGet(登录地址(不带参数;String类型地址),参数(如:user_id=6853&export=112));(返回的登录状态,一般是json格式,他会高数你是否登录成功,有的是true,有的是1,视情况而定)选择get还是post,模仿登录页面的请求

然后再来一个请求获取cookie 

Connectionconn=Jsoup.connect("登录后页面的地址");
conn.method(Method.GET);
conn.followRedirects(false);
Responseresponse=conn.execute();
System.out.println(response.cookies());

再讲cookie动态传入get或者post方法里面替换到写死的cookie;因为是测试所以写死了cookie,可以写成动态的;

之后再掉你要访问登录之后的页面,主页,或者是数据页面,里面一定要携带cookie,和http请求的基本参数信息,不然一定会被拦截的。

Stringdata=HttpPosts.sendGet(登录地址(不带参数;String类型地址),参数(如:user_id=6853&export=112));访问方法同上;这回给你返回的就是他们的页面了,如何你找到了对面的某个数据接口,那就可以直接访问他,返回的就直接是数据,不然你还要解析,他的页面,很麻烦的。解析页面一般用jsoup。

其实这个等于另类的入侵,不需要知道对方的接口文档,用程序利用http协议直接访问对方的服务器,

拿到你想要的东西。当然有验证码的情况下,是很难的。这是爬虫基础。只是一带而过,讲的有些片面,不到之处多多海涵。

以上就是极悦java培训机构小编介绍的“做Java爬虫,有些感悟心得,分享给大家”的内容,希望对大家有帮助,更多java最新资讯请继续关注极悦java培训机构官网,每天会有精彩内容分享与你。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>