網路爬蟲學習筆記(一),網路爬蟲學習筆記
一個簡單網路爬蟲的實現
——初嘗試 抓取百度首頁
由於分組我選擇了網路爬蟲組,在瞭解了一些簡單的概念性知識之後,便迫不及待的想要動手嘗試一下自己抓取網頁資訊,在此分享一下自己學習網路爬蟲的過程。
首先,什麼是網路爬蟲? 以下是百度百科的定義
那麼,網路爬蟲的基本工作原理又是什嗎?1)從一個初始URL集合中挑選一個URL,下載該URL對應的頁面;2)解析該頁面,從該頁面中抽取出其包含的URL集合,接下來將抽取的URL集合再添加到初始URL集合中;3)重複前兩個過程,直到爬蟲達到某種停止標準為止。
我是用Java語言來寫網路爬蟲的,所以初期是在學習Java語言的文法知識,並且因為抓取到的頁面資訊是由HTML寫的,所以也簡單的對HTML做了一些瞭解,大概知道某些標籤的含義即可。
在動手開始寫網路爬蟲之前,學長推薦了幾個比較好用的jar包給我,也在此貼上。
Jsoup: http://pan.baidu.com/s/1kW2NU
文檔:http://www.open-open.com/jsoup/
FileUtils: http://pan.baidu.com/s/1y3Adr
文檔:http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html
通過閱讀Jsoup文檔我們發現,其實要抓取一個頁面非常簡單,這裡以http://www.baidu.com 為例:
- Document doc = Jsoup.connect("http://www.baidu.com").get();
connect(String url)方法會建立一個新的Connection,然後通過get()方法獲得一個Document對象;其實剩下的就是一個對HTML的解析工作了,比如通過doc.toString()方法就可以擷取到網頁HTML的字串,然後通過I/O操作可以吧這個字串儲存在本地檔案中,這樣一個簡單的抓取工作就結束了,只需要幾行代碼而已。在抓取到的HTML檔案中可以看到 這其中其實包含著很多的URL,而每一個URL又會跳轉到其他的頁面,上面說的網路爬蟲的基本定義中講到需要將抓取到的頁面中的URL取出再添加到新的URL集合中進行抓取,那麼我該如何提取這些URL呢?
- Elements links = doc.select("a");
- for ( Element link : links ) {
- String linkHref = link.attr("href");
- }
通過這樣幾條語句就可以得到頁面中<a>標籤下的href屬性了,加在for迴圈中就可以遍曆到頁面中的所有URL,這些內容在上面的Jsoup文檔中也有講到;之後只要通過上面的方法進行就可以得到這些URL對應的HTML文本了。上面還說道一個jar包是FileUtils,他可以很方便的進行檔案讀寫操作,例如在上面我們得到的一個頁面HTML字串暫且用Str來表示,使用FileUtils只需要一條語句便可以將其儲存到本地。
- FileUtils.writeStringToFile(new File("baidu.html"), Str, "UTF-8");
它的含義就是將Str字串以"UTF-8"的編碼方式儲存在目前的目錄下的baidu.html檔案中在之後的學習中還會用到這個包中的其他方法,具體請參考API文檔
這樣,一個最簡單的網路爬蟲就成功了,還有很多的功能需要添加,加油!