java实现简单的爬虫之今日头条

时间:2022-03-18 17:51:53

前言

需要提前说下的是,由于今日头条的文章的特殊性,所以无法直接获取文章的地址,需要获取文章的id然后在拼接成url再访问。下面话不多说了,直接上代码。

示例代码如下

  1. public class Demo2 { 
  2.  
  3.  public static void main(String[] args) { 
  4.  
  5.   // 需要爬的网页的文章列表 
  6.   String url = "http://www.toutiao.com/news_finance/"
  7.   //文章详情页的前缀(由于今日头条的文章都是在group这个目录下,所以定义了前缀,而且通过请求获取到的html页面) 
  8.   String url2="http://www.toutiao.com/group/"
  9.   //链接到该网站 
  10.   Connection connection = Jsoup.connect(url); 
  11.   Document content = null
  12.   try { 
  13.     //获取内容 
  14.     content = connection.get(); 
  15.   } catch (IOException e) { 
  16.     e.printStackTrace(); 
  17.   } 
  18.   //转换成字符串 
  19.   String htmlStr = content.html(); 
  20.   //因为今日头条的文章展示比较奇葩,都是通过js定义成变量,所以无法使用获取dom元素的方式获取值 
  21.   String jsonStr = StringUtils.substringBetween(htmlStr,"var _data = "";"); 
  22.   System.out.println(jsonStr); 
  23.   Map parse = (Map) JSONObject.parse(jsonStr); 
  24.   JSONArray parseArray = (JSONArray) parse.get("real_time_news"); 
  25.   Map map=null
  26.   List<Map> maps=new ArrayList<>(); 
  27.   //遍历这个jsonArray,获取到每一个json对象,然后将其转换成Map对象(在这里其实只需要一个group_id,那么没必要使用map) 
  28.   for(int i=0;i<parseArray.size();i++){ 
  29.     map = (Map)parseArray.get(i); 
  30.     maps.add((Map)parseArray.get(i)); 
  31.     System.out.println(map.get("group_id")); 
  32.  
  33.   } 
  34.   //遍历之前获取到的map集合,然后分别访问这些文章详情页 
  35.   for (Map map2 : maps) { 
  36.     connection = Jsoup.connect(url2+map2.get("group_id")); 
  37.     try { 
  38.       Document document = connection.get(); 
  39.       //获取文章标题 
  40.       Elements title = document.select("[class=article-title]"); 
  41.       System.out.println(title.html()); 
  42.       //获取文章来源和文章发布时间 
  43.       Elements articleInfo = document.select("[class=articleInfo]"); 
  44.       Elements src = articleInfo.select("[class=src]"); 
  45.       System.out.println(src.html()); 
  46.       Elements time = articleInfo.select("[class=time]"); 
  47.       System.out.println(time.html()); 
  48.       //获取文章内容 
  49.       Elements contentEle = document.select("[class=article-content]"); 
  50.       System.out.println(contentEle.html()); 
  51.     } catch (IOException e) { 
  52.       e.printStackTrace(); 
  53.     } 
  54.   } 
  55.  } 


总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。