java實現(xiàn)簡單的爬蟲之今日頭條
更新時間:2016年11月06日 11:37:32 作者:maylor_zhu
最近在學習搜索方面的東西,需要了解網(wǎng)絡爬蟲方面的知識,雖然有很多開源的強大的爬蟲,但本著學習的態(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();
//獲取文章標題
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)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
相關文章
spring學習之創(chuàng)建項目 Hello Spring實例代碼
這篇文章主要介紹了spring學習之創(chuàng)建項目 Hello Spring實例代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01
SpringBoot如何使用@Cacheable進行緩存與取值
這篇文章主要介紹了SpringBoot如何使用@Cacheable進行緩存與取值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08
Java通過XPath獲取XML文件中符合特定條件的節(jié)點
今天小編就為大家分享一篇關于Java通過XPath獲取XML文件中符合特定條件的節(jié)點,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01
SpringBoot實現(xiàn)識別圖片中的身份證號與營業(yè)執(zhí)照信息
這篇文章主要為大家詳細介紹了SpringBoot如何實現(xiàn)識別圖片中的身份證號與營業(yè)執(zhí)照信息,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2024-01-01
解決springboot報錯Could not resolve placeholder‘x
這篇文章主要介紹了解決springboot報錯:Could not resolve placeholder ‘xxx‘ in value “${XXXX}問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11

