iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 3
6

前言MurMur...

原本規畫這個部分可以寫個十天左右。不過,因為我之前就有寫過爬蟲文章,所以為了不讓自己太偷懶(笑),所以可能會縮短一點。另外,再加上,早上亂逛別人文章的時候,發現了一位Howard大也在寫爬蟲的相關文章,而且看了一下他的文章,我覺得他的文章寫得也不錯,還好沒有過來AI這組跟我競爭(噓!你們甚麼都沒看到!)。
不過,這也不代表我的文章沒有了價值。人家寫爬蟲寫30天不是沒有它的道理,一定會挖得比較深去寫,也會寫盡各種可能的情況,我則比較希望,直接單刀直入,避免架構性的去說明整個爬蟲前後運作的原理,會直接把遇到的問題跟解決的方案列出來,另外,他實作的語言似乎是node.js,我則是用python實作,我還是有點價值的,嘿嘿~

比較項目 Howard大 GaotWang
篇幅 30天 6天
語言 Node.js Python
語言特性 非同步 同步
特性效果 爬蟲較快 非同步比較麻煩

對不起,我再多嘴一下。再爬蟲方面,node.js跟python有個最大的差別,就是node.js本身預設的發送request的方法就是非同步的,也就是它會在cpu允許的情況底下,盡可能的在等待對方server回應時,發出下一個request。而python中的request則不是如此預設,也就是發出一個request後,它會等待server回應後再發出下一個request。如果你看不懂request是什麼,不用擔心,後面就會慢慢介紹了。

總而言之,就爬蟲的領域來說,nodejs預設的速度會快一點,而python也可以達到同樣的效果,要多寫幾行程式碼就是了(另外也有爬蟲框架特別在解決這個問題)。但是出了爬蟲領域,nodejs也整天在處理怎麼變成同步啦,ㄎㄎ。

撰文動機

這篇文章主要是寫給剛開始學習Python爬蟲的初學者,由於自己剛開始學習這部分知識時,所有的套件名詞猶如雪片般飛來,有時會錯誤的理解一個套件的使用方式,有時則對某個套件期待過高,學成時總覺得不過爾爾,有種失落感。因此著述。

本篇文章的「爬蟲」

為了避免概念混淆,先打個預防針,我接下來要介紹的爬蟲,並非大規模的、地毯式的爬取任何可以取得的網頁,而是有針對性的爬蟲。也就是說,我在進行網頁爬取時,一般都會在同一個domain之內(網址中”http:/ /“後,第一個”/“符號之前的字串),同時會先鎖定我要爬取的幾個頁面,並進一步鎖定每一個頁面中我要取得的資訊,然後最後會用相對精準的方式整理資料存入資料庫。

套件簡介

Python爬蟲,主要是透過以下幾個套件達成:

  1. requests: 用來對目標網頁的server發出requests,底層是urllib。
  2. BeautifulSoup: 用來解析html,底層是re(正則表達式)。
  3. pandas: 用來爬取表格很方便。
  4. selenium: 原本的網頁測試工具,用來應付麻煩的javascript。
  5. re: 正則表達式,用來取出技術性比較高的文字段落。

之後幾天的文章規劃

  1. 12/9 網路爬蟲Day2 - html檔的取得及常見問題
  2. 12/10 網路爬蟲Day3 - html檔的取得及常見問題(續)
  3. 12/11 網路爬蟲Day4 - html檔的解析
  4. 12/12 網路爬蟲Day5 - 爬蟲進階: 非同步爬蟲程式的撰寫
  5. 12/13 網路爬蟲Day6 - 爬蟲進階: 非同步爬蟲配上多執行續

上一篇
資料分析師的學習之路(續)
下一篇
網路爬蟲Day2 - html檔的取得及常見問題
系列文
玩轉資料與機器學習-以自然語言處理為例31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Howard
iT邦新手 4 級 ‧ 2017-12-08 21:14:56

拉沙發...

/images/emoticon/emoticon35.gif

Wolke iT邦研究生 5 級 ‧ 2017-12-17 13:50:45 檢舉

node.js 可以寫await 做等待

我要留言

立即登入留言