上一集中咱們說到須要用Java來製做一個知乎爬蟲,那麼這一次,咱們就來研究一下如何使用代碼獲取到網頁的內容。html
首先,沒有HTML和CSS和JS和AJAX經驗的建議先去W3C(點我點我)小小的瞭解一下。java
說到HTML,這裏就涉及到一個GET訪問和POST訪問的問題。正則表達式
若是對這個方面缺少了解能夠閱讀W3C的這篇:《GET對比POST》。瀏覽器
啊哈,在此再也不贅述。網絡
而後咧,接下來咱們須要用Java來爬取一個網頁的內容。函數
這時候,咱們的百度就要派上用場了。工具
沒錯,他再也不是那個默默無聞的網速測試器了,他即將成爲咱們的爬蟲小白鼠!~測試
咱們先來看看百度的首頁:url
相信你們都知道,如今這樣的一個頁面,是HTML和CSS共同工做的結果。spa
咱們在瀏覽器中右擊頁面,選擇「查看頁面源代碼」:
沒錯,就是這一坨翔同樣的東西。這就是百度頁面的源代碼。
接下來咱們的任務,就是使用咱們的爬蟲也獲取到同樣的東西。
先來看一段簡單的源碼:
以上就是Java模擬Get訪問百度的Main方法,
能夠運行一下看看結果:
啊哈,和咱們前面用瀏覽器看到的如出一轍。至此,一個最最簡單的爬蟲就算是作好了。
可是這麼一大坨東西未必都是我想要的啊,怎麼從中抓取出我想要的東西呢?
以百度的大爪子Logo爲例。
臨時需求:
獲取百度Logo的大爪子的圖片連接。
先說一下瀏覽器的查看方法。
鼠標對圖片右擊,選擇審查元素(火狐,谷歌,IE11,均有此功能,只是名字不太同樣):
啊哈,能夠看到在一大堆div的圍攻下的可憐的img標籤。
這個src就是圖像的連接了。
那麼在java中咱們怎麼搞呢?
事先說明,爲了方便演示代碼,全部代碼均未做類封裝,還請諒解。
咱們先把前面的代碼封裝成一個sendGet函數:
這樣看起來稍微整潔了一點,請原諒我這個強迫症。
接下來的任務,就是從獲取到的一大堆東西里面找到那個圖片的連接。
咱們首先能夠想到的方法,是對頁面源碼的字符串result使用indexof函數進行String的子串搜索。
沒錯這個方法是能夠慢慢解決這個問題,好比直接indexOf("src")找到開始的序號,而後再稀里嘩啦的搞到結束的序號。
不過咱們不能一直使用這種方法,畢竟草鞋只適合出門走走,後期仍是須要切假腿來拿人頭的。
請原諒個人亂入,繼續。
那麼咱們用什麼方式來尋找這張圖片的src呢?
沒錯,正以下面觀衆所說,正則匹配。
若是有同窗不太清楚正則,能夠參照這篇文章:[Python]網絡爬蟲(七):Python中的正則表達式教程。
簡單來講,正則就像是匹配。
好比三個胖子站在這裏,分別穿着紅衣服,藍衣服,綠衣服。
正則就是:抓住那個穿綠衣服的!
而後把綠胖子單獨抓了出來。
就是這麼簡單。
可是正則的語法卻仍是博大精深的,剛接觸的時候不免有點摸不着頭腦,
向你們推薦一個正則的在線測試工具:正則表達式在線測試。
有了正則這個神兵利器,那麼怎麼在java裏面使用正則呢?
先來看個簡單的小李子吧。
啊錯了,小栗子。
運行結果:
index.html
沒錯,這就是咱們的第一個正則代碼。
這樣應用的抓取圖片的連接想必也是信手拈來了。
咱們將正則匹配封裝成一個函數,而後將代碼做以下修改:
好的,如今萬事俱備,只差一個正則語法了!
那麼用什麼正則語句比較合適呢?
咱們發現只要抓住了src="xxxxxx"這個字符串,就能抓出整個src連接,
因此簡單的正則語句:src=\"(.+?)\"
完整代碼以下:
這樣咱們就能用java抓出百度LOGO的連接了。
好吧雖然花了不少時間講百度,可是基礎要打紮實啦,下次咱們正式開始抓知乎咯!~