java實(shí)現(xiàn)簡(jiǎn)單的爬蟲之今日頭條
前言
需要提前說(shuō)下的是,由于今日頭條的文章的特殊性,所以無(wú)法直接獲取文章的地址,需要獲取文章的id然后在拼接成url再訪問(wèn)。下面話不多說(shuō)了,直接上代碼。
示例代碼如下
public class Demo2 { public static void main(String[] args) { // 需要爬的網(wǎng)頁(yè)的文章列表 String url = "http://www.toutiao.com/news_finance/"; //文章詳情頁(yè)的前綴(由于今日頭條的文章都是在group這個(gè)目錄下,所以定義了前綴,而且通過(guò)請(qǐng)求獲取到的html頁(yè)面) 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(); //因?yàn)榻袢疹^條的文章展示比較奇葩,都是通過(guò)js定義成變量,所以無(wú)法使用獲取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<>(); //遍歷這個(gè)jsonArray,獲取到每一個(gè)json對(duì)象,然后將其轉(zhuǎn)換成Map對(duì)象(在這里其實(shí)只需要一個(gè)group_id,那么沒(méi)必要使用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集合,然后分別訪問(wèn)這些文章詳情頁(yè) 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()); //獲取文章來(lái)源和文章發(fā)布時(shí)間 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é)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
- java編程實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)絡(luò)爬蟲示例過(guò)程
- Java 使用maven實(shí)現(xiàn)Jsoup簡(jiǎn)單爬蟲案例詳解
- Java 實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲框架詳細(xì)代碼
- 半小時(shí)實(shí)現(xiàn)Java手?jǐn)]網(wǎng)絡(luò)爬蟲框架(附完整源碼)
- 使用java實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲
- Java實(shí)現(xiàn)的爬蟲抓取圖片并保存操作示例
- java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)爬蟲代碼示例
- java實(shí)現(xiàn)網(wǎng)頁(yè)爬蟲的示例講解
- Java爬蟲 信息抓取的實(shí)現(xiàn)
- Java實(shí)現(xiàn)爬蟲
相關(guān)文章
原生Java操作mysql數(shù)據(jù)庫(kù)過(guò)程解析
這篇文章主要介紹了原生Java操作mysql數(shù)據(jù)庫(kù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11spring cloud gateway整合sentinel實(shí)現(xiàn)網(wǎng)關(guān)限流
這篇文章主要介紹了spring cloud gateway整合sentinel實(shí)現(xiàn)網(wǎng)關(guān)限流,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01SpringBoot Redis配置Fastjson進(jìn)行序列化和反序列化實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot Redis配置Fastjson進(jìn)行序列化和反序列化實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10java多線程編程之使用Synchronized關(guān)鍵字同步類方法
JAVA中要想解決“臟數(shù)據(jù)”的問(wèn)題,最簡(jiǎn)單的方法就是使用synchronized關(guān)鍵字來(lái)使run方法同步,看下面的代碼,只要在void和public之間加上synchronized關(guān)鍵字2014-01-01javaweb圖書商城設(shè)計(jì)之圖書模塊(4)
這篇文章主要介紹了javaweb圖書商城設(shè)計(jì)之圖書模塊的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Java Speech API實(shí)現(xiàn)語(yǔ)音識(shí)別
Java語(yǔ)音識(shí)別是一項(xiàng)非常有用的功能,它可以將語(yǔ)音轉(zhuǎn)換為文本,從而實(shí)現(xiàn)語(yǔ)音輸入和語(yǔ)音控制功能,在當(dāng)今數(shù)字化時(shí)代,語(yǔ)音識(shí)別技術(shù)逐漸成為人機(jī)交互的重要方式之一,語(yǔ)音識(shí)別技術(shù)可以幫助我們將語(yǔ)音數(shù)據(jù)轉(zhuǎn)化為文字,進(jìn)而進(jìn)行后續(xù)的處理和分析2023-10-10