用Raspberry Pi寫Python網路爬蟲 — (2) 安裝衰敗的selenium

Boyie Chen
5 min readJul 22, 2020

--

前言

上回,我們在raspberry pi上安裝了python的環境,並用macbook ssh連線到pi來寫code。看起來真有那麼點意思,好像可以來爬蟲了!耶依!

爬蟲菜雞如我雖然最愛用的還是 requests.get() 加上 BeautifulSoup() ,最後用CSS Selector或find_All()暴力找出所要的物件…

不過有時碰上了java script或者有user interface的網頁,由於功力實在太淺,只好搬出selenium大法。

雖說在小小的raspberry pi上跑瀏覽器實在不是個好主意,不過用pi爬蟲就是用長時間的運作來交換效益嘛…下面就來試試看挑戰安裝selenium吧!(殊不知開啟了三個小時的debug地獄…)

前置準備

我們需要備齊:

  1. chromium-browser (就是chrome)
  2. webdriver(就是chrome driver)
  3. selenium

安裝指令

實際上,這步驟異常的簡單,也無須到chrome driver的官方網站去找對應版本的driver,只要在terminal輸入指令就好:

sudo apt-get install chromium-browser #還沒有安裝瀏覽器的才需要這行
sudo apt-get install chromium-chromedriver #會自動找對應的版本
sudo pip3 install selenium
檢查一下版本
chromedriver的版本會自動匹配
driver的安裝位置在/usr/lib/chromium-browser/ 底下

以上的程式碼參考了:
https://www.itdaan.com/tw/7903e5a1537f27c83839c72777737879

這行指令可以幫我們確認安裝路徑,等等在python中的code要告訴電腦說driver在哪裡:

dpkg -L chromium-chromedriver

So far so good, 理論上來說這樣就大功告成了,只要在jupyter notebook中記得寫上:

driver_path = “/usr/lib/chromium-browser/chromedriver”
browser = webdriver.Chrome(driver_path)

就可以了讓python確實控制pi裡迷你瀏覽器chromium了(鼓掌

使用selenium

完整的程式碼如下:

# 套件
from selenium import webdriver
from bs4 import BeautifulSoup
# 設定driver路徑
driver_path = "/usr/lib/chromium-browser/chromedriver"
browser = webdriver.Chrome(driver_path)
# 目標網站
url = "http://google.com"
browser.get(url)
# 取得html原始碼
soup = BeautifulSoup(browser.page_source, "lxml")
# 解析連結
for link in soup.find_all("a"):
print(link['href'])

可能會出現的Bug及修復的方式

事實上,在最開始時,我沒有辦法正確地使用get()這個函式,因此花了很多時間debug。最後莫名其妙地解決了,但為了避免有遇到跟我相同問題的人走太多冤枉路,因此大致提供我做了什麼(但我仍舊不明白原因):

  1. 先看到這篇,關於no_proxy環境變數的問題
    https://stackoverflow.com/questions/7347494/selenium-webdriver-geturl-does-not-open-the-url
  2. 再看到這篇,用deconfig-editor來改環境變數
    https://askubuntu.com/questions/11274/setting-up-proxy-to-ignore-all-local-addresses
安裝deconfig-editor
執行它來修改環境變數
找到system底下的proxy

然後就okay了,不過當我把環境變數再改回default的時候仍然可行。因此原因不明QQ

下一回筆記應該就是寫寫怎樣爬新聞網站裡的新聞了,希望可以寫得言簡意賅點QQ

--

--

Boyie Chen
Boyie Chen

Written by Boyie Chen

A graduate student studying Economics and Statistics

No responses yet