亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java實現登錄之后抓取數據

2024-07-14 08:41:45
字體:
來源:轉載
供稿:網友

最近做了一個從網絡上抓取數據的一個小程序。主要關于信貸方面,收集的一些黑名單網站,從該網站上抓取到自己系統中。

也找了一些資料,覺得沒有一個很好的,全面的例子。因此在這里做個筆記提醒自己。

首先需要一個jsoup的jar包,我用的1.6.0。。下載地址為:http://pan.baidu.com/s/1mgqOuHa

1,獲取網頁內容(核心代碼,技術有限沒封裝)。

2,登錄之后抓取網頁數據(如何在請求中攜帶cookie)。

3,獲取網站的ajax請求方法(返回json)。

以上這三點我就用一個類全部包含(比較糙望見諒,直接copy代碼過去,應該就可以用)

一,這個類分別有這上面的1,2,3三中方法,直接main方法可以進行測試

package com.minxinloan.black.web.utils;import java.io.BufferedReader;import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLConnection;import java.net.URLEncoder;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.StringTokenizer;import net.sf.json.JSONArray;import net.sf.json.JSONObject;import org.jsoup.Connection;import org.jsoup.Connection.Method;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;public class CookieUtil {  public final static String CONTENT_TYPE = "Content-Type";  public static void main(String[] args) {        //String loginURL = "http://www.p2peye.com/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=Lsc66&username=puqiuxiaomao&password=a1234567";    String listURL = "http://www.p2peye.com/blacklist.php?p=2";    String logURL = "http://www.p2peye.com/member.php";    //********************************需要登錄的*************************************************    try {        Connection.Response res =             Jsoup.connect(logURL)              .data("mod","logging"                  ,"action","login"                  ,"loginsubmit","yes"                  ,"loginhash","Lsc66"                  ,"username","puqiuxiaomao"                  ,"password","a1234567")              .method(Method.POST)              .execute();                        //這兒的SESSIONID需要根據要登錄的目標網站設置的session Cookie名字而定        Connection con=Jsoup.connect(listURL);        //設置訪問形式(電腦訪問,手機訪問):直接百度都參數設置        con.header("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");        //把登錄信息的cookies保存如map對象里面        Map <String,String> map=res.cookies();        Iterator<Entry<String,String>> it =map.entrySet().iterator();        while(it.hasNext()){          Entry<String,String> en= it.next();           //把登錄的信息放入請求里面          con =con.cookie(en.getKey(), en.getValue());                  }        //再次獲取Document對象。        Document objectDoc = con.get();                Elements elements = objectDoc.getAllElements();//獲取這個連接返回頁面的源碼內容(不是源碼跟源碼差不多)        for (Element element : elements) {          //element是迭代出來的標簽:如:<div><span></span></div>          Elements elements2= element.getAllElements();//           for (Element element2 : elements2) {             element2.text();             element2.attr("href");//獲取標簽屬性。element2代表a標簽:href代表屬性             element2.text();//獲取標簽文本          }        }                //********************************不需要登錄的*************************************************                String URL = "http://www.p2peye.com/blacklist.php?p=2";        Document conTemp = Jsoup.connect(URL).get();        Elements elementsTemps = conTemp.getAllElements();         for (Element elementsTemp : elementsTemps) {           elementsTemp.text();           elementsTemp.attr("href");//獲取標簽屬性。element2代表a標簽:href代表屬性           elementsTemp.text();//獲取標簽文本        }                        //********************************ajax方法獲取內容。。。*************************************************。         HttpURLConnection connection = null;          BufferedReader reader = null;          try {            StringBuffer sb = new StringBuffer();            URL getUrl = new URL(URL);            connection = (HttpURLConnection)getUrl.openConnection();            reader = new BufferedReader(new InputStreamReader(                connection.getInputStream(),"utf-8"));            String lines;            while ((lines = reader.readLine()) != null) {              sb.append(lines);            };            List<Map<String, Object>> list = parseJSON2List(sb.toString());//json轉換成list          } catch (Exception e) {                      } finally{            if(reader!=null)              try {                reader.close();              } catch (IOException e) {              }            // 斷開連接            connection.disconnect();          }            } catch (IOException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }      }    public static Map<String, Object> parseJSON2Map(String jsonStr){     Map<String, Object> map = new HashMap<String, Object>();     //最外層解析     JSONObject json = JSONObject.fromObject(jsonStr);     for(Object k : json.keySet()){       Object v = json.get(k);        //如果內層還是數組的話,繼續解析       if(v instanceof JSONArray){         List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();         Iterator<JSONObject> it = ((JSONArray)v).iterator();         while(it.hasNext()){           JSONObject json2 = it.next();           list.add(parseJSON2Map(json2.toString()));         }         map.put(k.toString(), list);       } else {         map.put(k.toString(), v);       }     }     return map;   }     public static List<Map<String, Object>> parseJSON2List(String jsonStr){     JSONArray jsonArr = JSONArray.fromObject(jsonStr);     List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();     Iterator<JSONObject> it = jsonArr.iterator();     while(it.hasNext()){       JSONObject json2 = it.next();       list.add(parseJSON2Map(json2.toString()));     }     return list;   }     }

二,這個是獲取驗證碼的類,可以研究下。(但你要要分析出網站的驗證碼的請求地址)

package com.minxinloan.black.web.utils;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLConnection;import java.nio.charset.Charset;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.StringTokenizer;public class Utils {//解析驗證碼的  public static Content getRandom(String method, String sUrl,// 要解析的url      Map<String, String> paramMap, // 存放用戶名和密碼的map      Map<String, String> requestHeaderMap,// 存放COOKIE的map      boolean isOnlyReturnHeader, String path) {    Content content = null;    HttpURLConnection httpUrlConnection = null;    InputStream in = null;    try {      URL url = new URL(sUrl);      boolean isPost = "POST".equals(method);      if (method == null          || (!"GET".equalsIgnoreCase(method) && !"POST"              .equalsIgnoreCase(method))) {        method = "POST";      }      URL resolvedURL = url;      URLConnection urlConnection = resolvedURL.openConnection();      httpUrlConnection = (HttpURLConnection) urlConnection;      httpUrlConnection.setRequestMethod(method);      httpUrlConnection.setRequestProperty("Accept-Language",          "zh-cn,zh;q=0.5");      // Do not follow redirects, We will handle redirects ourself      httpUrlConnection.setInstanceFollowRedirects(false);      httpUrlConnection.setDoOutput(true);      httpUrlConnection.setDoInput(true);      httpUrlConnection.setConnectTimeout(5000);      httpUrlConnection.setReadTimeout(5000);      httpUrlConnection.setUseCaches(false);      httpUrlConnection.setDefaultUseCaches(false);      httpUrlConnection.connect();      int responseCode = httpUrlConnection.getResponseCode();      if (responseCode == HttpURLConnection.HTTP_OK          || responseCode == HttpURLConnection.HTTP_CREATED) {        byte[] bytes = new byte[0];        if (!isOnlyReturnHeader) {          DataInputStream ins = new DataInputStream(              httpUrlConnection.getInputStream());          // 驗證碼的位置          DataOutputStream out = new DataOutputStream(              new FileOutputStream(path + "/code.bmp"));          byte[] buffer = new byte[4096];          int count = 0;          while ((count = ins.read(buffer)) > 0) {            out.write(buffer, 0, count);          }          out.close();          ins.close();        }        String encoding = null;        if (encoding == null) {          encoding = getEncodingFromContentType(httpUrlConnection              .getHeaderField(""));        }        content = new Content(sUrl, new String(bytes, encoding),            httpUrlConnection.getHeaderFields());      }    } catch (Exception e) {      return null;    } finally {      if (httpUrlConnection != null) {        httpUrlConnection.disconnect();      }    }    return content;  }  public static String getEncodingFromContentType(String contentType) {    String encoding = null;    if (contentType == null) {      return null;    }    StringTokenizer tok = new StringTokenizer(contentType, ";");    if (tok.hasMoreTokens()) {      tok.nextToken();      while (tok.hasMoreTokens()) {        String assignment = tok.nextToken().trim();        int eqIdx = assignment.indexOf('=');        if (eqIdx != -1) {          String varName = assignment.substring(0, eqIdx).trim();          if ("charset".equalsIgnoreCase(varName)) {            String varValue = assignment.substring(eqIdx + 1)                .trim();            if (varValue.startsWith("/"")                && varValue.endsWith("/"")) {              // substring works on indices              varValue = varValue.substring(1,                  varValue.length() - 1);            }            if (Charset.isSupported(varValue)) {              encoding = varValue;            }          }        }      }    }    if (encoding == null) {      return "UTF-8";    }    return encoding;  }  // 這個是輸出  public static boolean inFile(String content, String path) {    PrintWriter out = null;    File file = new File(path);    try {      if (!file.exists()) {        file.createNewFile();      }      out = new PrintWriter(new FileWriter(file));      out.write(content);      out.flush();      return true;    } catch (Exception e) {      e.printStackTrace();    } finally {      out.close();    }    return false;  }  public static String getHtmlReadLine(String httpurl) {    String CurrentLine = "";    String TotalString = "";    InputStream urlStream;    String content = "";    try {      URL url = new URL(httpurl);      HttpURLConnection connection = (HttpURLConnection) url          .openConnection();      connection.connect();      System.out.println(connection.getResponseCode());      urlStream = connection.getInputStream();      BufferedReader reader = new BufferedReader(      new InputStreamReader(urlStream, "utf-8"));      while ((CurrentLine = reader.readLine()) != null) {        TotalString += CurrentLine + "/n";      }      content = TotalString;    } catch (Exception e) {    }    return content;  }}class Content {  private String url;  private String body;  private Map<String, List<String>> m_mHeaders = new HashMap<String, List<String>>();  public Content(String url, String body, Map<String, List<String>> headers) {    this.url = url;    this.body = body;    this.m_mHeaders = headers;  }  public String getUrl() {    return url;  }  public String getBody() {    return body;  }  public Map<String, List<String>> getHeaders() {    return m_mHeaders;  }}


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品网址在线| 国产在线播放不卡| 日韩在线精品一区| 久久视频免费在线播放| 精品成人国产在线观看男人呻吟| 亚洲美女中文字幕| 一区二区三区日韩在线| 久久久视频免费观看| 亚洲香蕉伊综合在人在线视看| xxxxx91麻豆| 精品久久久久久久中文字幕| 韩国精品久久久999| 日韩av在线最新| 狠狠操狠狠色综合网| 欧美日韩激情小视频| 欧美诱惑福利视频| 中文字幕日本精品| 亚洲图片在区色| 国产精品吊钟奶在线| 这里只有视频精品| 亚洲黄色www网站| 欧美综合国产精品久久丁香| 久久男人av资源网站| 国产一区二区丝袜高跟鞋图片| 亚洲第一黄色网| 国产91露脸中文字幕在线| 欧美老肥婆性猛交视频| 色偷偷88888欧美精品久久久| 欧美日韩亚洲系列| 国产日韩中文字幕在线| 69av成年福利视频| 在线精品播放av| 一区二区三区高清国产| 日本久久亚洲电影| 亚洲аv电影天堂网| 久久久人成影片一区二区三区| 国产精品久久久久999| 一区二区日韩精品| 欧美日韩在线观看视频| 综合国产在线观看| 91色视频在线观看| 亚洲国产精品va在线看黑人| 午夜精品久久久久久久久久久久| 日韩经典第一页| 国产在线拍揄自揄视频不卡99| 国内精品免费午夜毛片| 激情久久av一区av二区av三区| 亚洲天堂av电影| 伊人伊成久久人综合网站| 国产成+人+综合+亚洲欧洲| 国产亚洲一区精品| 国产在线拍揄自揄视频不卡99| 欧美日韩中文字幕综合视频| 97色在线视频观看| 国产精品扒开腿做爽爽爽视频| 在线观看欧美视频| 91国产视频在线播放| 亚洲人成77777在线观看网| 欧美在线激情视频| 在线观看精品国产视频| 日韩精品在线视频| 成人免费视频在线观看超级碰| 亚洲黄色av网站| 日韩在线视频导航| 久久久久一本一区二区青青蜜月| 欧美大秀在线观看| 国产欧美日韩综合精品| 日本成人在线视频网址| 91亚洲精品久久久| 亚洲美女精品久久| 日韩中文字幕视频在线观看| 伊人成人开心激情综合网| 日本亚洲精品在线观看| 成人xxxxx| 日韩性生活视频| 亚洲老板91色精品久久| 国产欧美精品久久久| 国产精品一区二区三| 久久久精品一区二区三区| 国产精品免费久久久久久| 亚洲一区二区福利| 国内精品在线一区| 国产精品午夜一区二区欲梦| 亚洲欧洲日本专区| 色综合视频一区中文字幕| 国产成人精品视频在线| 国产综合在线观看视频| 色婷婷亚洲mv天堂mv在影片| 国产精品免费电影| 久久精品国产69国产精品亚洲| 国内精品免费午夜毛片| 色视频www在线播放国产成人| 国产精品久久久久久av福利| 欧美巨大黑人极品精男| 精品久久久久久久久国产字幕| 97视频在线观看视频免费视频| 日韩在线一区二区三区免费视频| 国产成人精品电影久久久| 欧美激情视频网址| 日本高清不卡的在线| 日韩美女视频中文字幕| 欧美日韩国产影院| 日韩在线播放视频| 欧美专区中文字幕| 亚洲国产精品久久精品怡红院| **欧美日韩vr在线| 亚州av一区二区| 日日摸夜夜添一区| 国产精品久久久久久久久久久新郎| 欧美日韩国产第一页| 国产精品亚洲аv天堂网| 欧美精品少妇videofree| 久热国产精品视频| 国产97色在线| 国产精品视频网站| 国产日韩中文字幕在线| 亚洲精品在线91| 亚洲国产天堂久久综合网| 91在线网站视频| 成人春色激情网| 国产成人精品综合久久久| 久久精品国产亚洲精品| 国产在线观看一区二区三区| 久久精品视频一| 亚洲人av在线影院| 欧美人与物videos| 亚洲欧洲日韩国产| 国产黑人绿帽在线第一区| 日韩国产精品亚洲а∨天堂免| 欧美日韩另类视频| 国产精品专区一| 北条麻妃99精品青青久久| 国产日韩精品一区二区| 日韩精品高清在线| 亚洲视频777| 日本成人激情视频| 欧美激情久久久久| 亚洲国产成人av在线| 国产美女直播视频一区| 91在线精品视频| 国产精品a久久久久久| 丝袜亚洲另类欧美重口| 国产精品久久久久久久久久久久久| 韩国三级日本三级少妇99| 97精品欧美一区二区三区| 国产精品亚洲网站| 久久久电影免费观看完整版| 日韩大胆人体377p| 中文字幕一区二区精品| 国产一区二区三区高清在线观看| 久久久久五月天| 亚洲跨种族黑人xxx| 欧美日韩国产精品一区| 日韩在线免费av| 日本成人免费在线| 国内偷自视频区视频综合| 亚洲精品福利在线| 91伊人影院在线播放| 久久精品国产96久久久香蕉| 久久久久久久一区二区三区| 亚洲欧美精品在线| 欧美一区三区三区高中清蜜桃| 97在线观看视频| 欧美激情精品久久久久久蜜臀|