欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實現(xiàn)簡單的爬蟲之今日頭條

 更新時間:2016年11月06日 11:37:32   作者:maylor_zhu  
最近在學(xué)習(xí)搜索方面的東西,需要了解網(wǎng)絡(luò)爬蟲方面的知識,雖然有很多開源的強大的爬蟲,但本著學(xué)習(xí)的態(tài)度,想到之前在做資訊站的時候需要用到爬蟲來獲取一些文章,今天剛好有空就研究了一下.在網(wǎng)上看到了一個demo,使用的是Jsoup,我拿過來修改了一下,有需要的朋友可以參考

前言

需要提前說下的是,由于今日頭條的文章的特殊性,所以無法直接獲取文章的地址,需要獲取文章的id然后在拼接成url再訪問。下面話不多說了,直接上代碼。

示例代碼如下

public class Demo2 {

 public static void main(String[] args) {

  // 需要爬的網(wǎng)頁的文章列表
  String url = "http://www.toutiao.com/news_finance/";
  //文章詳情頁的前綴(由于今日頭條的文章都是在group這個目錄下,所以定義了前綴,而且通過請求獲取到的html頁面)
  String url2="http://www.toutiao.com/group/";
  //鏈接到該網(wǎng)站
  Connection connection = Jsoup.connect(url);
  Document content = null;
  try {
    //獲取內(nèi)容
    content = connection.get();
  } catch (IOException e) {
    e.printStackTrace();
  }
  //轉(zhuǎn)換成字符串
  String htmlStr = content.html();
  //因為今日頭條的文章展示比較奇葩,都是通過js定義成變量,所以無法使用獲取dom元素的方式獲取值
  String jsonStr = StringUtils.substringBetween(htmlStr,"var _data = ", ";");
  System.out.println(jsonStr);
  Map parse = (Map) JSONObject.parse(jsonStr);
  JSONArray parseArray = (JSONArray) parse.get("real_time_news");
  Map map=null;
  List<Map> maps=new ArrayList<>();
  //遍歷這個jsonArray,獲取到每一個json對象,然后將其轉(zhuǎn)換成Map對象(在這里其實只需要一個group_id,那么沒必要使用map)
  for(int i=0;i<parseArray.size();i++){
    map = (Map)parseArray.get(i);
    maps.add((Map)parseArray.get(i));
    System.out.println(map.get("group_id"));

  }
  //遍歷之前獲取到的map集合,然后分別訪問這些文章詳情頁
  for (Map map2 : maps) {
    connection = Jsoup.connect(url2+map2.get("group_id"));
    try {
      Document document = connection.get();
      //獲取文章標(biāo)題
      Elements title = document.select("[class=article-title]");
      System.out.println(title.html());
      //獲取文章來源和文章發(fā)布時間
      Elements articleInfo = document.select("[class=articleInfo]");
      Elements src = articleInfo.select("[class=src]");
      System.out.println(src.html());
      Elements time = articleInfo.select("[class=time]");
      System.out.println(time.html());
      //獲取文章內(nèi)容
      Elements contentEle = document.select("[class=article-content]");
      System.out.println(contentEle.html());
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
 }
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • Java中構(gòu)造、生成XML簡明教程

    Java中構(gòu)造、生成XML簡明教程

    這篇文章主要介紹了Java中構(gòu)造、生成XML簡明教程,本文通過dom4j包來完成,需要的朋友可以參考下
    2014-08-08
  • 深入理解java的spring-ioc的使用

    深入理解java的spring-ioc的使用

    這篇文章主要介紹了java的spring-ioc的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • log4j2.xml文件詳解及在日志中加入全局guid

    log4j2.xml文件詳解及在日志中加入全局guid

    這篇文章主要介紹了log4j2.xml文件詳解及在日志中加入全局guid,基于很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 原生Java操作mysql數(shù)據(jù)庫過程解析

    原生Java操作mysql數(shù)據(jù)庫過程解析

    這篇文章主要介紹了原生Java操作mysql數(shù)據(jù)庫過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • java 函數(shù)的重載和重寫實例代碼

    java 函數(shù)的重載和重寫實例代碼

    本文主要介紹Java 的重載和重寫,學(xué)習(xí)java的同學(xué)都知道Java的多態(tài)有多重要,這里給大家舉例說明函數(shù)的重載和重寫,希望能幫助有需要的小伙伴
    2016-07-07
  • spring cloud gateway整合sentinel實現(xiàn)網(wǎng)關(guān)限流

    spring cloud gateway整合sentinel實現(xiàn)網(wǎng)關(guān)限流

    這篇文章主要介紹了spring cloud gateway整合sentinel實現(xiàn)網(wǎng)關(guān)限流,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • SpringBoot Redis配置Fastjson進(jìn)行序列化和反序列化實現(xiàn)

    SpringBoot Redis配置Fastjson進(jìn)行序列化和反序列化實現(xiàn)

    這篇文章主要介紹了SpringBoot Redis配置Fastjson進(jìn)行序列化和反序列化實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • java多線程編程之使用Synchronized關(guān)鍵字同步類方法

    java多線程編程之使用Synchronized關(guān)鍵字同步類方法

    JAVA中要想解決“臟數(shù)據(jù)”的問題,最簡單的方法就是使用synchronized關(guān)鍵字來使run方法同步,看下面的代碼,只要在void和public之間加上synchronized關(guān)鍵字
    2014-01-01
  • javaweb圖書商城設(shè)計之圖書模塊(4)

    javaweb圖書商城設(shè)計之圖書模塊(4)

    這篇文章主要介紹了javaweb圖書商城設(shè)計之圖書模塊的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Java Speech API實現(xiàn)語音識別

    Java Speech API實現(xiàn)語音識別

    Java語音識別是一項非常有用的功能,它可以將語音轉(zhuǎn)換為文本,從而實現(xiàn)語音輸入和語音控制功能,在當(dāng)今數(shù)字化時代,語音識別技術(shù)逐漸成為人機交互的重要方式之一,語音識別技術(shù)可以幫助我們將語音數(shù)據(jù)轉(zhuǎn)化為文字,進(jìn)而進(jìn)行后續(xù)的處理和分析
    2023-10-10

最新評論