iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 1
0
Software Development

[行銷也要自動化] 用 Python Selenium + NodeJS + Amazon EC2 打造簡易關鍵字搜尋報表應用!系列 第 1

Day0:KeywordSearch 1.0 教學文概覽 + 核心功能(Selenium)前情提要

嗨大家好!我是阿寶,大概半年前開始碰前後端和Python,同時間相對擅長數位行銷、網站分析、社群經營等。
最近因為被重要的老師啟蒙,而有了把行銷領域重複性的工作,用技術整合成一個簡易應用的想法;
於是經過大概3周的嘗試,KeywordSearch 1.0就誕生了!

初版的她其實很簡單,一個搜尋框一個按鍵,在10秒內告訴你特定關鍵字過去一年的搜尋趨勢以及所有相似關鍵詞組推薦(適合行銷人員做關鍵字規劃使用)。

接下來30天我將把這個小專案開發的過程、碰到的坑等等,一步步紀錄下來,也一方面幫自己做個筆記。
雖然為了讓讀者好理解,內容會盡量詳述;但實際上,對自學最有幫助的還是自己動手查stackoverflow、論壇、看懂官方文件,是不建議一直都仰賴完整中文教學的喔!
開始吧!

概覽

Week1:架設運作環境

  • NodeJS、Express安裝環境、原理及基本設定
  • GET/POST method基本運作原理和應用

Week2、3:資料抓取與整理

  • 用Jupyter Notebook測試爬蟲程式
  • 深入認識selenium
  • 了解並套用Google Trends API
  • 快速上手BeautifulSoup

Week3:軟體構成

  • 認識並使用python-shell套件在NodeJS與Python間互傳資料

Week4:部署與其他問題

  • 啟動並設定自己的AWS EC2 instance環境
  • 讓selenium在主機啟動看不見的瀏覽器:xvfb

selenium 前導介紹

整合型的工具,越能解決使用者越大範圍的痛點,則越能提供價值。所以原本的專案絕對不會只停在1.0的版本,而未來要擴充她的功能就跟我們主要介紹的這個套件很有關係:selenium。目前關鍵字詞組推薦的來源也是透過selenium來爬到。

簡介

以我對selenium的了解,簡單來說她是用來模擬用戶在瀏覽器的行為,因此最常被用來做軟體測試。不過如果當我們爬蟲的目標網站是動態產生資料的,我們不僅無法從原本的頁面獲取資料,也沒辦法在開發者工具的network panel看到固定的json檔案,這個時候使用selenium就是其中一個解決辦法(註1)。

註1:如果網頁是用ajax來載入json資料,那可能可以在network那邊看到當你觸發資料載入時,呼叫的json檔,通常點開就會直接是純資料(這時候只要用json方法來處理就好,不用解析頁面其實也是個優點)。但我遇過網站是動態產生json檔,每次請求url都不一樣XD,這時候就需要selenium大神了,缺點是速度會慢比較多。也可以用phantomJS、CasperJS,在後面文章我會補充到。

簡單實作示範

直接用terminal跑一個簡單的爬蟲吧,就決定來把ithome首頁的所有問答標題抓出來好了:

  1. 先透過pip安裝selenium(這是最懶人的安裝方式,我在後面文章會提到在虛擬環境中的完整安裝,因為在EC2要用虛擬環境來確保她跑的是python3.5,當你的環境中有多個版本的python)
$ sudo pip install selenium
  1. 進入可運作python script的模式
$ python // 
Python 3.6.3 |Anaconda, Inc.| (default, Oct 13 2017, 12:02:49) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.

進入python script模式後,一次輸入一行(也可以多行,我在後面的文章會一併提到小技巧)

  1. 首先引入selenium和webdriver,等下才能啟動瀏覽器
>>> from selenium import webdriver
  1. 引入BeautifulSoup用來解析我們待會爬到的html物件
>>> from bs4 import BeautifulSoup
  1. 創一個array來存解析後的text
>>> ELE = []
  1. 開啟Chrome瀏覽器(後面文章會提到如何隱藏瀏覽器)
>>> browser = webdriver.Chrome()
  1. 指定瀏覽器前往ithome首頁
>>> browser.get('https://ithelp.ithome.com.tw/')
  1. 觀察一下問答標題們的class,格式很整齊都是.qa-list__title
>>> browser.find_element_by_css_selector('.qa-list__title')
  1. 用BeautifulSoup解析html物件
>>> soup = BeautifulSoup(browser.page_source, 'html.parser')
  1. 把物件一個一個存進ELE array
>>> for ele in soup.select('.qa-list__title'):
        ELE.append(ele.text)
>>> print(ELE)

沒意外的話你就把ithome首頁的問答標題(第一頁)都給抓下來了,這是個簡單的小測試
下一篇我們安裝nodeJS,並同時淺談connect,為下下篇的Express做準備。


下一篇
Day1:NodeJS 基本安裝、環境設定、淺談Connect|KeywordSearch 1.0 爬蟲關鍵字報表工具
系列文
[行銷也要自動化] 用 Python Selenium + NodeJS + Amazon EC2 打造簡易關鍵字搜尋報表應用!14

尚未有邦友留言

立即登入留言