代碼地址以下:
http://www.demodashi.com/demo/11643.htmlhtml
昨天LZ去面試,遇到一個大牛,被血虐一番,發現本身基礎仍是很薄弱,對java一些原理掌握的仍是不夠穩固,好比java反射註解,知道一點就是說不出來,很尷尬... 生命不止,學習不止啊java
以前那個項目 QNews 用的是的第三方的數據平臺,因此訪問次數會有限制,這就很無奈。。。git
個人博客地址github
天天只能請求100次....可是LZ這個窮屌絲也買不起服務器,因此就上網查,有什麼別的方法能夠獲取數據,意外之間發現了jsoup這個強大的框架,就花了上午時間學習了一下,而後下午作了一個小Demo,功能比較單一,請見諒。面試
其實一開始的時候是想 爬今日頭條的數據,可是發現數據老是爲空,我估計是上鎖了... 而後就把矛頭轉向了 簡書,哈哈哈...果真簡書就是好,數據直接就能夠爬到了, 好開心啊!!瀏覽器
先演示一波動態圖:服務器
話說這個佈局就花了我半個小時...框架
一些基礎的我就不說了,就簡單說明一下個人數據是如何爬到的。能夠直接去看一下個人源碼,寫的比較倉促,一些細節沒有處理好,多多指教。佈局
官方文檔學習
compile 'org.jsoup:jsoup:1.9.2'
在單個部分上 右擊,而後點擊檢查選項(我用的是QQ瀏覽器,其餘何嘗試),底部就會跳出網頁的源碼,而且會跟蹤到這個item對應的源碼。
從上圖能夠大概瞭解到每一個<li></li>
標籤裏的內容就是咱們每一個item的信息。
Document
對象Document document = Jsoup.connect("http://www.jianshu.com/") .timeout(10000) .get();
這裏經過創建與服務器的連接,並設置10s的超時鏈接來獲取
Document
對象
Elements
對象Elements noteList = document.select("ul.note-list"); Elements li = noteList.select("li");
找到文章列表模塊,發現
<ul class="note-list></ul>
是咱們須要信息的跟標籤。經過select
方法查詢節點全部信息。
for (Element element : li) { ... }
下面所有都是
li
標籤的列表,裏面的內容大體類似,咱們就能夠經過循環來遍歷裏面的信息。
由於信息比較多,我就選擇比較有表明性的來將一下。
有個很是簡單的方式:直接在你須要獲取內容的部分右擊,點擊 檢查,就能夠直接追蹤到要查詢的位置。
就拿標題而言,直接在標題右擊-->檢查,便可,一目瞭然。而後我把數據截圖一下。
String title = element.select("a.title").text()
經過
select
查詢節點信息,而後.text
獲取裏面文本內容。
String avatar = element.select("a.avatar").select("img").attr("src")
這個就是先找到頭像 節點,而後圖片節點,最後經過
attr
獲取圖片url
String authorLink = element.select("a.blue-link").attr("abs:href")
這裏注意
href
元素,他存放的就是跳轉連接,不過是相對路徑,這個時候就須要經過attr("abs:href")
獲取絕對路徑。
其餘 就 大同小異,其實我知道也就這麼多,也是不斷嘗試經過打印得出來的,仍是比較心酸的,比較沒學過 js
,不過對 js
挺有興趣的。
剩下的就是將獲取到的數據加載到bean對象中
public class JianshuBean { private String authorName; // 做者 private String authorLink; // 做者連接 private String time; // 更新時間 private String primaryImg; // 主圖 private String avatarImg; // 頭像 private String title; // 標題 private String titleLink; // 標題連接 private String content; // 內容 private String collectionTagLink; // 專題連接 private String readNum; // 閱讀量 private String talkNum; // 評論 private String likeNum; // 喜歡 private String collectionTag; // 專題 // ... get set }
for (Element element : li) { JianshuBean bean = new JianshuBean(); bean.setAuthorName(element.select("div.name").text()); // 做者姓名 bean.setAuthorLink(element.select("a.blue-link").attr("abs:href")); // 做者首頁連接 bean.setTime(element.select("span.time").attr("data-shared-at")); // 發表時間 bean.setPrimaryImg(element.select("img").attr("src")); // 主圖 bean.setAvatarImg(element.select("a.avatar").select("img").attr("src")); // 頭像 bean.setTitle(element.select("a.title").text()); // 標題 bean.setTitleLink(element.select("a.title").attr("abs:href")); // 標題連接 bean.setContent(element.select("p.abstract").text()); // 內容 bean.setCollectionTagLink(element.select("a.collection-tag").attr("abs:href")); // 專題連接 String[] text = element.select("div.meta").text().split(" "); if (text[0].matches("[0-9]+")) { bean.setReadNum(text[0]); bean.setTalkNum(text[1]); bean.setLikeNum(text[2]); } else { bean.setCollectionTag(text[0]); bean.setReadNum(text[1]); bean.setTalkNum(text[2]); bean.setLikeNum(text[3]); } mBeans.add(bean); }
再來看一下效果:
但願你們多多支持我,謝謝!
jsoup爬蟲簡書首頁數據作個小Demo
注:本文著做權歸做者,由demo大師代發,拒絕轉載,轉載須要做者受權