java实现简单的爬虫之今日头条
程序员文章站
2024-03-11 18:25:49
前言
需要提前说下的是,由于今日头条的文章的特殊性,所以无法直接获取文章的地址,需要获取文章的id然后在拼接成url再访问。下面话不多说了,直接上代码。
示例代码如下...
前言
需要提前说下的是,由于今日头条的文章的特殊性,所以无法直接获取文章的地址,需要获取文章的id然后在拼接成url再访问。下面话不多说了,直接上代码。
示例代码如下
public class demo2 { public static void main(string[] args) { // 需要爬的网页的文章列表 string url = "http://www.toutiao.com/news_finance/"; //文章详情页的前缀(由于今日头条的文章都是在group这个目录下,所以定义了前缀,而且通过请求获取到的html页面) string url2="http://www.toutiao.com/group/"; //链接到该网站 connection connection = jsoup.connect(url); document content = null; try { //获取内容 content = connection.get(); } catch (ioexception e) { e.printstacktrace(); } //转换成字符串 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对象,然后将其转换成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(); //获取文章标题 elements title = document.select("[class=article-title]"); system.out.println(title.html()); //获取文章来源和文章发布时间 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()); //获取文章内容 elements contentele = document.select("[class=article-content]"); system.out.println(contentele.html()); } catch (ioexception e) { e.printstacktrace(); } } } }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。