Android實戰——jsoup實現網絡爬蟲,糗事百科項目的起步


 

本篇文章包括如下內容:css

  • 前言
  • jsoup的簡介
  • jsoup的配置
  • jsoup的使用
  • 結語

對於Android初學者想要作項目時,最大的煩惱是什麼?毫無疑問是數據源的缺少,固然能夠選擇第三方接口提供數據,也可使用網絡爬蟲獲取數據,這樣就不用第三方數據做爲支持。原本是打算爬一些購物網站的數據,因爲他們的反爬作得好,因此沒辦法爬到數據,只能爬取糗事百科的數據,或許聰明的你會想到能夠高仿個糗事百科做爲本身的練手項目,利用jsoup是徹底沒問題的html

jsoup的學習須要結合前端的基礎知識,爬取前端的數據,若是你學過JS,那麼你能夠本身徹底不用看文檔的狀況下,使用該框架,由於其設計與JS的使用幾乎相同,廢話很少說,開車啦前端

使用項目原話:jsoup是一個Java庫來處理實際的HTML。它提供了一個很是方便的API來提取和操縱數據,使用最好的DOM,CSS和jquery-like方法jquery

項目地址:https://github.com/jhy/jsoup
中文文檔:http://www.open-open.com/jsoup/git

jsoup的配置很簡單,須要在gradle中添加如下依賴github

因爲jsoup須要獲取網絡數據,因此記得添加網絡權限緩存

1、獲取HTMLcookie

jsoup提供兩種網絡請求,get和post,使用代碼也及其簡單,咱們首先爬取糗事百科首頁的HTML。注意:因爲是網絡請求操做,必須放在子線程中運行,不然4.4以上的版本會報錯網絡

① get方式框架

② post方式

這裏對post的參數介紹一下

  • connect:設置鏈接的Url
  • data:設置post的鍵值對數據
  • userAgent:設置用戶代理(請求頭的東西,能夠判斷你是PC仍是Mobile端)
  • cookie:設置緩存
  • timeout:設置請求超時
  • post:發送post請求

既然已經獲取HTML的Document對象了,接下來就是分析Html元素的時候了

2、獲取Html元素

① 網頁端

以糗事百科爲例子,咱們查看糗事百科首頁的數據對應的Html元素是什麼,咱們能夠經過F12,找到對應的Html元素

能夠看到一個a標籤就是文章詳情的內容,咱們能夠經過這個a標籤的class=」contentHerf」做爲惟一標識來獲取該連接,獲取以後,繼續爬取詳情頁的文章詳細內容,因此咱們經過爬取的a標籤的連接進入該文章的詳情頁

固然也有一些詳情頁有圖片的,咱們能夠經過圖片的的class=」thumb」做爲惟一標識來爬取圖片裏面的連接

因爲糗事百科採用分頁加載的狀況,咱們須要在爬取完第一張內容後,接着爬取第二章的內容,下面是糗事百科的分頁Url的規則,很簡單,咱們能夠經過一個循環就能夠了

好了,分析完網頁端以後,就應該在咱們的Android端採用代碼,將上面的步驟實現出來了

② Android端

經過上面的分析後,能夠總結咱們須要實現的步驟有:

  1. 爬取主頁的詳情頁url
  2. 進入詳情頁爬取內容和圖片
  3. 循環爬取第二頁、第三頁…

聰明的你,可能會想到第四步第五步…

  1. 封裝Bean對象
  2. 使用ListView填充內容
  3. 爬取日期、做者、評論等內容完善項目

1) 爬取主頁的詳情頁url

爬取主頁的url能夠經過a標籤的class=」contentHerf」,咱們經過jsoup的屬性選擇器來實現,這裏會用到css知識,jsoup中文文檔也有很詳細的介紹

這裏對使用到的對象進行介紹

  • Document:至關於一個Html文件
  • Elements:至關於一個標籤的集合
  • Element:至關於一個標籤

這裏要注意Elements與Element的toString()方法和text()方法

  • toString():打印出來的是標籤的Html內容
  • text():打印出來的是標籤對應的文本內容

css選擇器

  • select():獲取符合屬性選擇器要求的標籤內容
  • 或getElementById:獲取符合ID選擇器要求的標籤內容
  • 或getElementsByTag:獲取符合Tag選擇器要求的標籤內容

2) 進入詳情頁爬取內容和圖片

這段代碼也至關簡單,這裏就很少解釋了

3) 循環爬取第二頁、第三頁…

這裏只須要嵌套一個循環進去就能夠了,完整代碼以下

4) 固然,咱們爬取到的內容以後,毫無疑問就是要封裝成對象,經過ArrayList存儲起來,這樣你的數據源就解決了

5) 後面爬取做者、日期、評論等信息就由大家去練習了,雅思7分有多難而後界面一仿,項目就出來了

3、爬取結果

網絡爬蟲雖然帶來了不少數據源的問題,但不少網站都已經經過一些技術實現反爬蟲的效果了,因此你們仍是以學習jsoup爲主,不論是Android端仍是Web端jsoup的用處很普遍,因此掌握起來是必須的,據說豆瓣和知乎均可以爬出來哦,想作項目的同窗能夠去試試哦

相關文章
相關標籤/搜索