git爬蟲項目地址( 終於上傳代碼了~~~~關注和star在哪裏):https://github.com/MatrixSeven/ZhihuSpider(已完結)mysql
附贈以前爬取的數據一份(mysql): 連接:https://github.com/MatrixSeven/ZhihuSpider/README.MD 只下載不點贊,不star,差評差評~藍瘦香菇)jquery
本文由博主原創,轉載請註明出處:知乎爬蟲之4:抓取頁面數據git
我們上一篇分析了知乎的登錄請求和如何拿到粉絲/關注的請求,那麼我們這篇就來研究下如何拿利用Jsoup到我們想要的數據。
那麼我們說下,首先請求關注者和粉絲者是pcweb版本的,可是獲取頁面的是手機頁面的。
好,正題:github
jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套很是省力的API,可經過DOM,CSS以及相似於jQuery的操做方法來取出和操做數據。web
HttpClient 是 Apache Jakarta Common 下的子項目,能夠用來提供高效的、最新的、功能豐富的支持 HTTP 協議的客戶端編程工具包,而且它支持 HTTP 協議最新的版本和建議。sql
首先模擬手機瀏覽器的UA。就是讓我們打開的頁面返回的是移動端的頁面效果,那麼最應該怎麼怎麼作呢?其實服務器斷定你是ie仍是chrome仍是firefox是根據請求頭裏面的UA實現的,所以我們要找一個手機瀏覽器的UA。。
我們能夠某度一下或者直接在瀏覽器裏面直接f12,模擬移動端,而後看請求參數:chrome
User-Agent:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36
妥妥的沒問題:數據庫
那我們如何將這句體現到程序裏面呢?
簡單,在我們拿到get對象後直接設置:編程
httpGet.setHeader("User-Agent", "Mozilla/5.0
(Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36");
就ok了,而後我們就能夠用jsoup來拿我們想要的元素了,jsoup的語法和jq一模一樣。
我們直接對着頁面,右擊我們想要的元素,選擇審查元素,而後用jq的選擇器選出來就行了。
能夠參考jQuery 選擇器json
直接get我們以前分析的請求地址
https://www.zhihu.com/api/v4/members/Sweets07/followers?per_page=10&
include=data%5B%2A%5D.employments%2Ccover_url%2Callow_message%2Canswer_coun
t%2Carticles_count%2Cfavorite_count%2Cfollower_count%2Cgender%2Cis_followe
d%2Cmessage_thread_token%2Cis_following%2Cbadge%5B%3F%28type%3Dbest_answerer
%29%5D.topics&limit=10&offset=30
不過要記得替換用戶名字和在請求頭裏加入cookie的最後一段zc_0
而後請求數據返回的是json
{
"paging": {
"is_end": false,
"next": "https://www.zhihu.com/api/v4/members/Sweets07/followers?per_page=10&include=data%5B%2A%5D.answer_count%2Carticles_count%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F%28type%3Dbest_answerer%29%5D.topics&limit=10&offset=20",
"previous": "https://www.zhihu.com/api/v4/members/Sweets07/followers?per_page=10&include=data%5B%2A%5D.answer_count%2Carticles_count%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F%28type%3Dbest_answerer%29%5D.topics&limit=10&offset=0",
"is_start": false,
"totals": 398
},
"data": [
{
"is_followed": true,
"avatar_url_template": "https://pic1.zhimg.com/da8e974dc_{size}.jpg",
"name": "陳曉峯",
"url": "",
"type": "people",
"user_type": "people",
"answer_count": 0,
"url_token": "chen-xiao-feng-84",
"headline": "阿里巴巴,分佈式數據庫,",
"avatar_url": "https://pic1.zhimg.com/da8e974dc_is.jpg",
"is_following": false,
"is_org": false,
"follower_count": 14,
"badge": [],
"id": "ff02ea0544901a9ddfcb7ba60c73b673",
"articles_count": 0
}
]
}
這個數據包括了下次請求地址,上次請求地址,時候是開始,時候是結束,共有多少粉絲,關注人基本信息,
所以我們能夠在一個while裏來得到全部粉絲數:
流程:
一套下來,就能拿到一個用戶的全部粉絲了。