知乎問答圖片爬取

前段時間看到不少爬蟲的案例,有不少爬招聘網站數據的,還有房產中介數據的,固然也有不少爬取知乎用戶數據的,不少爬蟲都是用Python語言,可是我不會用它,只能用Java寫一個爬蟲來抓取知乎問題下答案的圖片連接git

先上一個下載的圖片的截圖github

看到網上這麼多人寫爬蟲,內心也是羨慕,想着本身何時也能夠寫一個簡單的爬蟲來了解下爬蟲的原理,這幾天剛開學,就嘗試來抓取知乎的圖片,主要是由於知乎某些問答的妹子都很好看……正則表達式


抓取的原理

想辦法獲取圖片的連接,而後添加到一個容器中,依次下載,很簡單的json

過程

一開始我單純的認爲只要獲取一個問答首頁的源碼,而後用正則表達式拿到圖片連接,接下來就不是事兒了。可是這樣作只能獲取到第一頁的數據api

下圖爲第一頁的數據,每個List-item就是一個回答,這兒一共才20條瀏覽器

點擊查看更多回答。F12中打開network選項卡,再選擇XHR查看AJAX請求,發現有一個連接特別長,查看requestresponse,就發現了下圖中的東西多線程

查看請求的詳情,發現這個請求返回的是一個json數據
ide

這是一個實例連接:https://www.zhihu.com/api/v4/questions/38906616/answers?include=data%5B*%5D.is_normal%2Cadmin_closed_comment%2Creward_info%2Cis_collapsed%2Cannotation_action%2Cannotation_detail%2Ccollapse_reason%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Ccreated_time%2Cupdated_time%2Creview_info%2Cquestion%2Cexcerpt%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Cupvoted_followees%3Bdata%5B*%5D.mark_infos%5B*%5D.url%3Bdata%5B*%5D.author.follower_count%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset=3&limit=20&sort_by=default工具

連接參數中的offset表示與第一個回答的偏移量,limit表示返回回答數據的條數測試

我覺得這樣就能夠了,用在線get工具測試了一下,看是否是相同的結果

結果響應了這樣的json數據,根據那個英語,猜想是沒有受權,因而去瀏覽器開發人員工具下尋找有沒有什麼特殊requestHeader沒有添加,因而發現了一個authorization的字段,故添加好header參數後再次嘗試,結果呢?此次就對了

若是問這個authorization字段的值怎麼來的,其實我也不知道,我是複製的瀏覽器的數據

如今拿到了回答的json數據

通過分析,每個回答的json中有一個content屬性,這個屬性包含了回答的內容,其中就含有圖片的連接。到此,感受寄幾終於找到了光明

經過這個屬性的值,就能夠拿到圖片的連接。

返回的這個json數據中還包含回答的總數等內容,更多有用的就本身去挖掘了喲

使用的jar包:

  • httpclient
  • json-lib:解析json數據

使用這些jar包還須要其它依賴包

須要注意的地方

  1. 這個小項目中沒有登陸,因此有的須要登陸帳號的問題就不能獲取到圖片連接,會跳轉到登陸的頁面
  2. 圖片較多的時候下載時間會比較長,沒有使用多線程技術

最後附上項目的github地址Java抓取知乎圖片

相關文章
相關標籤/搜索