Android實戰——jsoup實現網絡爬蟲,糗事百科項目的起步
本篇文章包括以下內容:
- 前言
- jsoup的簡介
- jsoup的配置
- jsoup的使用
- 結語
對於Android初學者想要做項目時,最大的煩惱是什麽?毫無疑問是數據源的缺乏,當然可以選擇第三方接口提供數據,也可以使用網絡爬蟲獲取數據,這樣就不用第三方數據作為支持。本來是打算爬一些購物網站的數據,由於他們的反爬做得好,所以沒辦法爬到數據,只能爬取糗事百科的數據,或許聰明的你會想到可以高仿個糗事百科作為自己的練手項目,利用jsoup是完全沒問題的
jsoup的學習需要結合前端的基礎知識,爬取前端的數據,如果你學過JS,那麽你可以自己完全不用看文檔的情況下,使用該框架,因為其設計與JS的使用幾乎相同,廢話不多說,開車啦
使用項目原話:jsoup是一個Java庫來處理實際的HTML。它提供了一個非常方便的API來提取和操縱數據,使用最好的DOM,CSS和jquery-like方法
項目地址:https://github.com/jhy/jsoup
中文文檔:http://www.open-open.com/jsoup/
jsoup的配置很簡單,需要在gradle中添加以下依賴
由於jsoup需要獲取網絡數據,所以記得添加網絡權限
一、獲取HTML
jsoup提供兩種網絡請求,get和post,使用代碼也及其簡單,我們首先爬取糗事百科首頁的HTML。註意:由於是網絡請求操作,必須放在子線程中運行,否則4.4以上的版本會報錯
① get方式
② post方式
這裏對post的參數介紹一下
- connect:設置連接的Url
- data:設置post的鍵值對數據
- userAgent:設置用戶代理(請求頭的東西,可以判斷你是PC還是Mobile端)
- cookie:設置緩存
- timeout:設置請求超時
- post:發送post請求
既然已經獲取HTML的Document對象了,接下來就是分析Html元素的時候了
二、獲取Html元素
① 網頁端
以糗事百科為例子,我們查看糗事百科首頁的數據對應的Html元素是什麽,我們可以通過F12,找到對應的Html元素
可以看到一個a標簽就是文章詳情的內容,我們可以通過這個a標簽的class=”contentHerf”作為唯一標識來獲取該鏈接,獲取之後,繼續爬取詳情頁的文章詳細內容,所以我們通過爬取的a標簽的鏈接進入該文章的詳情頁
當然也有一些詳情頁有圖片的,我們可以通過圖片的的class=”thumb”作為唯一標識來爬取圖片裏面的鏈接
由於糗事百科采用分頁加載的情況,我們需要在爬取完第一張內容後,接著爬取第二章的內容,下面是糗事百科的分頁Url的規則,很簡單,我們可以通過一個循環就可以了
好了,分析完網頁端之後,就應該在我們的Android端采用代碼,將上面的步驟實現出來了
② Android端
通過上面的分析後,可以總結我們需要實現的步驟有:
- 爬取主頁的詳情頁url
- 進入詳情頁爬取內容和圖片
- 循環爬取第二頁、第三頁…
聰明的你,可能會想到第四步第五步…
- 封裝Bean對象
- 使用ListView填充內容
- 爬取日期、作者、評論等內容完善項目
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分有多難然後界面一仿,項目就出來了
三、爬取結果
網絡爬蟲雖然帶來了很多數據源的問題,但很多網站都已經通過一些技術實現反爬蟲的效果了,所以大家還是以學習jsoup為主,不管是Android端還是Web端jsoup的用處很廣泛,所以掌握起來是必須的,聽說豆瓣和知乎都可以爬出來哦,想做項目的同學可以去試試哦
Android實戰——jsoup實現網絡爬蟲,糗事百科項目的起步