Data Science 入門:Selenium 初體驗 — Data Scientist, Machine Learning Engineer 不專業薪情分析

前言

Gary Hsu
5 min readMay 23, 2020

最近剛好跟朋友談到 Data Scientist 在台灣的薪水,但手邊一直沒有相關的統計數據,於是把腦筋動到了 Yourator 上,但發現用傳統 python 的 requests 似乎會被 yourator 拒絕存取,就摸索了一下 Selenium,成功透過 Selenium 騙過 yourator 獲取到我想要的資料。這篇文章就像是一個小的 Data Science Project,希望能幫助到一些想要入門 Data Science 的人!

一、安裝會用到的libraries:

Seleium, BeautifulSoup, pandas, re (regular expression)

Conda版本:

conda install -c conda-forge seleniumconda install -c conda-forge pandasconda install -c anaconda beautifulsoup4

Pip 版本:

pip install seleniumpip install pandaspip install beautifulsoup4

如果你跟我一樣使用firefox:請下載這個driver
如果你是使用Google Chrome:請下載這個driver

安裝完之後,請確保自己的瀏覽器是目前最新的版本,

二、Data Extracting: 開始抓資料 (selenium):

Selenium 最基本的用法

selenium 會開啟你的 browser 然後將資訊從 driver.page_source 存到 web_content,這時候我們就可以透過這個 web_content 來獲得我們要的資訊。

三、Data Parsing: 開始解析資料 (Beautiful soup):

這邊就不多做介紹了,因為我本身對 Beautiful Soup 也不是特別熟稔,總之就是找出所有 class 為 y-card y-card-horizontal 的地方,在找出裡面的 職稱、公司名稱、薪資:

class = y-card y-card-horizontal
解析 web source content

(二) + (三):因為 Machine Learning, Data Science 的職缺有三頁,因此我就寫了一個loop 版本的,一次把資訊都抓下來

All in 1

titles:

商業資料分析師(Business Data Analyst),
深度 / 機器學習,
風控模型算法工程師...(省略)

companies:

UrCosme (@cosme TAIWAN),
PEZZALoan by GDP,
PEZZALoan by GDP... (省略)

salaries:

面議(經常性薪資達4萬元),
NT$ 1,000,000 - 2,000,000 (年薪),
NT$ 1,000,000 - 1,500,000 (年薪)... (省略)

四、Data Preprocessing 資料預處理 (pandas, re):

import pandas as pd# Assemble what we just get!
df = pd.DataFrame(zip(titles, companies, salaries))
df.columns = ['job_title', 'company_name', 'salary']
df

五、結果:

因為 Pandas 預設顯示float的方式會轉換成科學記號 (例如:3e10之類的)所以要轉換成我們比較好讀的格式:

至於第二行,因為我的朋友很厲害,我覺得年薪一百萬以下的工作他可能不會考慮,所以就幫他 drop 掉了。

pd.options.display.float_format = '{:.2f}'.format
df_high = df[df['month_salary_high'] >= 1000000]
df_high
所有可能突破年薪一百萬的ML/DS工作

太多了太多了,我朋友說他時間寶貴,他想要知道所有這些工作的總數,lower/upper bound 的平均數、標準差、四分位數!

df_high.describe()

describe會將所有數值的資料,做這些計算一次全部列出來,所以這些工作總共有24個,lower bound 平均數: 98萬多,upper bound 平均數 175萬多。

你可能會疑惑,column: salary_low、salary_high也是數值,為什麼沒有跑出來,因為他們其實是string。

結語:

其實這就像是一個小型 Data Science 更準確地來說會被歸類在 Data Engineering 的 Project(可能會有人不認同),從獲得數據(selenium)、再將數據清理乾淨(BeautifulSoup,regular expression)、獲得我想要的薪資資訊(pandas),其實 data science 沒那麼複雜沒那麼難,只是在大型的專案中,獲得數據、清理數據、分析數據、獲取資訊都會有更深入一些的作法,如果你跟我一樣對於花半個小時來寫 code ,然後對最後得到的這些簡單統計資訊感到開心的話,恭喜你!趕快和我一起加入 Data science 吧!

參考資料:

  1. Selenium相關的資訊: https://freelancerlife.info/zh/blog/python%E7%B6%B2%E8%B7%AF%E7%88%AC%E8%9F%B2%E6%95%99%E5%AD%B8-selenium%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C/

--

--