search
LoginSignup
1
Help us understand the problem. What are the problem?

posted at

updated at

Raspberry Pi4上でのWebスクレピング環境構築

1. 目的

SeleniumによるWebスレイピングの環境を作る。

2.作業

2-1 Jupyterのインストール

jyupterのインストール手順はこちら
インストールが完了すれば、jupyterを立ち上げる。

pi@raspberrypi:~ $ jupyter notebook  //jupyterを立ち上げる。

2-2 SeleniumとChromiumドライバのインストール

pi@raspberrypi:~ $ sudo pip install selenium==4.0.0
pi@raspberrypi:~ $ sudo apt-get install chromium-chromedriver #chromium-chromedriverのインストールを実施する。
pi@raspberrypi:~ $ chromedriver --version #正しくインストールできたか確認
ChromeDriver 78.0.3904.108 (4b26898a39ee037623a72fcfb77279fce0e7d648-refs/branch-heads/3904@{#889})

chromiumのインストール方法はこちら

2-3 ブラウザを立ち上げてみる

import sys
sys.path.append('/home/pi/.local/lib/python3.5/site-packages/')
from selenium import webdriver
browser = webdriver.Chrome(executable_path="/usr/lib/chromium-browser/chromedriver")
browser.get('https://www.yahoo.co.jp')

browser.getで指定したページが立ち上がる。
1.JPG

3-1 コンソールレベルでWebスクレイピングを実施する

必要なパッケージのインストールを行う。

# apt update && apt upgrade -y
# apt install chromium-browser
# apt install chromium-chromedriver
# apt install python3-selenium

3-2 確認テスト

下記のコードを走らせてみる

comdata.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import io
import sys

#'ascii' codec can't encode characters in position 0-6: ordinal not in range(128)エラー対策実施
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') 
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')

#chromedriverの設定
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--window-size=1024,768')
options.add_argument('--disable-dev-shm-usage')    



CODE=str(2152)
browser = webdriver.Chrome(options=options,executable_path="/usr/bin/chromedriver") # Chromeを準備(optionでブラウザ立ち上げ停止にしている)
URL='https://kabutan.jp/stock/?code= '+ CODE
browser.get(URL)  #株探サイトを開く。ブラウザ自体は立ち上げない


tmp = browser.find_element_by_class_name('company_block')
company_name=tmp.find_element_by_tag_name('h3')
xpath='//*[@id="kobetsu_right"]/div[4]/table/tbody'
xpath1='//*[@id="kobetsu_right"]/div[3]/table/tbody/tr[3]'


company_eps=browser.find_element_by_xpath(xpath1 + '/td[4]') #EPS
company_haitoub=browser.find_element_by_xpath(xpath1 + '/td[5]') #配当
company_gaiyo=browser.find_element_by_xpath(xpath + '/tr[3]/td') #会社概要
company_url=browser.find_element_by_xpath(xpath + '/tr[2]/td') #会社URL

print(company_eps.text)
print(company_haitoub.text)
print(company_name.text)
print(company_gaiyo.text)
print(company_url.text)
browser.close() #これがないと実行するたびにchromedriverのプロセスが蓄積しメモリを圧迫する。

実行結果

root@2a1627805ea9:/home/stock# python3 comdata.py
71.5
14.0
幼児活動研究会
幼稚園・保育園で幼児体育指導。独自教育プログラムを普及へ。園経営コンサルも。
http://www.youji.co.jp/

(注)
動かすコードにdriver.close()を書き忘れると、タスクマネージャーchromedriver.exeが
蓄積されることになる。この場合、killallでプロセスchromedriverを削除する。

root@2a1627805ea9:/home/stock# killall chromedriver

killallはインストールが必要

##killallをインストールする
root@2a1627805ea9:/home/stock# apt-get install psmisc 

rootのchoromium-browserのプロセスがたまっている場合は下記コマンドで消去する

ps  #プロセスを表示する
pgrep chromium-browse | xargs kill -9  #chromium-browserのプロセスを一括削除する

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1
Help us understand the problem. What are the problem?