2014年12月27日 星期六

[Python][教學] 網路爬蟲(crawler)實務(上)--網頁元件解析


        今年部落格最受歡迎文章:[Python] 現學現賣之網路爬蟲(Crawler)--以抓本BLOG為例是我剛學python時寫的程式,內容其實也都是照著老師的課程講義來做,很多細節也是矇懞懂懂.至今過了半年,爬網的經驗也多了一點,比較有內容可以跟大家分享.爬網有很多種用途,對比起搜尋引擎的全頁抓取,更多時候是抓取特定網站的特定內容,這時候除了爬蟲程式本身之外,對於網站欄位的解析更為重要.

進階版出來囉,有興趣的朋友可以參考[Python][教學] 網路爬蟲(crawler)進階實務-- 自動爬蟲(一)

  • 網頁解析工具
    現在各大瀏覽器都有網站解析工具可以看到網站的原始碼,只要打開想要的網站,開啟網站解析工具就可以,以下例子使用的是Safari內建的Web Inspectr.以愛評網網為例:先連到首頁,搜尋想要找的餐廳:

  • 打開Web Inspector:

  • 下方會出現Web Inspector:
  • 依節點點開網站架構:
  • 點選TimeLine可以看到網頁讀取每個元件的時間:
  • 點進去可以看到網站連結的真實網址(我們之後會用到):
  • 接著就要思考我們究竟要抓什麼東西?這邊我是想搜集每個商店的名稱,電話和地址.但是網頁原始碼落落長,要怎樣找到所要的節點資訊?可以透過Inspect小工具:


  • 點下去之後,將指標移到想觀察的元件上,就會出現對應的位置,從原始碼中可以很清楚看到店名alochas野草,很明顯地出現在的a tag(<a>......</a>)之間,這表示程式可以很輕易地抓到這個內容:


  •  接著觀察電話,會發現電話沒有直接顯示在原始碼中,原始碼出現的是一個img檔案(這是因為網站想反爬網做的處理,一般爬網程式無法抓取不是顯示在原始碼內的東西):
  • 這時候該怎麼辦呢?把圖片抓下來用ORC?當然也是一種做法,但是這樣太麻煩了,所以我決定繞一下,看有沒有地方顯示資料:
  • 點進野草的連結,發現這邊也有顯示電話:
  • 再啟動Inspect看一下內容,非常開心這邊的電話號碼是有標示在原始碼中的!:


16 則留言:

  1. 你好 我是高科大的 teddy 無意間搜尋到你的文章,剛好有python的問題,不知可否向您請教呢?
    是有關python爬文的問題,可是我一直無法成功。
    可以的話,我再詳細問你,感謝。

    回覆刪除
    回覆
    1. 非常感謝Yang Bryan,我把問題貼到我的部落格裡,不知道你借不介意,這邊留言我一職出現錯誤

      http://busystudent-demonic.blogspot.tw/

      只要一點進去就會看到我的問題了,最後來是非常謝你,謝謝。

      刪除
    2. 已經回覆在您的BLOG上囉~

      刪除
  2. 謝謝分享,這篇文對我現在想爬的東西,有相當大的啟發。

    回覆刪除
  3. 請問你有在幫別人寫程式嗎?謝謝

    回覆刪除
  4. 回覆
    1. 可以email來信討論唷,謝謝

      刪除
    2. 找不到你的,我的是irisyu1219@gmail.com

      刪除
  5. 新手學習遇到問題,可以跟你請教嗎

    回覆刪除
    回覆
    1. 可以給我聯絡方式嗎,
      我的 coco888v@gmail.com
      我把問題整理好寄給你

      刪除
    2. 可以直接用google messenger 丟我問唷

      刪除
  6. 可以請教你一些問題嗎?

    回覆刪除