中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中怎么利用jsoup爬取數據并解析

發布時間:2021-06-21 15:58:08 來源:億速云 閱讀:396 作者:Leah 欄目:大數據

java中怎么利用jsoup爬取數據并解析,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

1.首先分析下要爬的數據 :

java中怎么利用jsoup爬取數據并解析

a.獲取到請求考勤的接口 ,網站開發工具就能抓到比較順利(這里我登錄沒有搞定,迂回了一下。后面會記錄實現方式)

b.分析數據格式,簡單的html-table表格 nice!

二 、 獲取考勤數據并整理輸出到excel

這里爬數據我用了jsoup ,處理數據用了dom4j

    maven引入

    <dependency>
      <groupId>org.jsoup</groupId>
      <artifactId>jsoup</artifactId>
      <version>1.12.1</version>
    </dependency>
    <dependency>
      <groupId>dom4j</groupId>
      <artifactId>dom4j</artifactId>
      <version>1.6.1</version>
    </dependency>

代碼如下: 

  /**
   * 模擬請求獲取數據
   *
   * @param userId 用戶id
   * @param date 日期
   */
  @Override
  public List<KaoQinData> getPunchList(Integer userId, String date) throws Exception {
    UserBean user = userMapper.getUser(userId);
//拼裝請求地址、參數和必要的請求頭信息
    StringBuilder url = new StringBuilder();
    url.append("http://xxxxxx.com/newkaoqin?userid=");
    url.append(userId);
    url.append("&seldate=");
    url.append(date);
    Connection con2 = Jsoup.connect(url.toString());
    con2.header("User-Agent", USER_AGENT);
    con2.header("Host", HOST);
    con2.header("Referer", REFERER);
    con2.header("Cookie", getCookie());
    Response response = con2.ignoreContentType(true).method(Method.GET).execute();
//處理返回的數據
    String body = response.body();
    Document doc = Jsoup.parse(body);
//定位到要解析的位置 選擇器可以任意選擇。
    Elements tab2 = doc.getElementsByClass("tab2");
//因為后面有很多無用數據,我們只用第一個所以獲取第一個數據
    Element first = tab2.first();
//    first可能為空
    Elements tr = first.select("tr");
//處理數據  KaoQinData 是考勤數據的實體。統計后返回實體的集合
    List<KaoQinData> kaoQinData = new ArrayList<>();
    KaoQinData kaoQin;
    for (Iterator<org.jsoup.nodes.Element> cit = tr.iterator(); cit.hasNext(); ) {
      Element tr1 = cit.next();
      Elements td = tr1.select("td");
      if (td.size() > 0) {
        Element punchDateEle = td.get(0);
        String punchDateStr = punchDateEle.text();
        Element punchTimeEle = td.get(4);
        String punchTimeStr = punchTimeEle.text();
        if (!StringUtils.isEmpty(punchTimeStr)) {
          String substring = punchTimeStr.substring(0, punchTimeStr.indexOf(":"));
          Integer integer = Integer.valueOf(substring);
          if (integer >= 20) {
            System.out.println(punchDateStr + "," + punchTimeStr);
            kaoQin = new KaoQinData(user.getRealName(), punchDateStr, punchTimeStr);
            kaoQinData.add(kaoQin);
          }
        }
      }
    }
    return kaoQinData;
  }

這里基本上就差不多了。輸出excel什么的。隨便啦 喜歡用什么就用什么;

附:順便說一下,我因為沒有搞定自動登錄獲取cookie,偷巧迂回了一下,

1.在項目中創建了一個文件專門存放cookie,像這樣:

java中怎么利用jsoup爬取數據并解析

2.因此寫了一個接口用來更新cookie的接口,把新的cookie寫上去覆蓋cookie文件。

3.使用的時候獲取cookiefile文件內的cookie。(有點麻煩,后面有空再研究下自動登錄)

  /**
   * 獲取coockie.
   * @return
   * @throws IOException
   */
  private String getCookie() throws IOException {
    int num;
    char[] buf = new char[1024];
    File file = new File(COOKIE_FILEPATH);
    if (!file.exists()) {
      file.createNewFile();
    }
    FileReader fileReader = new FileReader(file.getPath());
    StringBuilder stringBuilder = new StringBuilder();

    while ((num = fileReader.read(buf)) != -1) {
      stringBuilder.append(buf, 0, num);
    }
    return stringBuilder.toString();
  }

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镶黄旗| 梁山县| 湖州市| 房产| 罗平县| 桂阳县| 富顺县| 扶沟县| 壶关县| 乐业县| 伊宁县| 溧水县| 城口县| 阳高县| 兴国县| 彭州市| 宜宾县| 尖扎县| 和政县| 安泽县| 内丘县| 高平市| 明溪县| 武冈市| 濉溪县| 龙泉市| 垣曲县| 若羌县| 昆明市| 萍乡市| 丰宁| 孟州市| 辽阳市| 庄浪县| 清新县| 瑞昌市| 民乐县| 邹城市| 无极县| 丘北县| 资讯|