引継ぎ(島崎)

目標 

釣り情報サイト(https://anglers.jp/)から富山湾の釣り場情報をスクレイピングする.

スクレピングとは 

スクレピングとは,Webサイトから大量の情報を字と動的に抽出するコンピュータソフトウェア技術.
Webスクレイピングは、Webサイトやデータベースを探り、大量のデータの中から特定のデータのみを自動で抽出することができる.

環境 

Python 3.11 64bitで行う.(他でも可)
seleniumはバージョン4を用いる。

準備 

ChromeDriverのインストール 

まず、ChromeDriverをインストールする.自身のGoogleChromeのバージョンを確認し,それに合ったバージョンをインストールする. (https://chromedriver.chromium.org/downloads)。

seleniumのインストール 

seleniumをインストールする.バージョン3でもよいが,プログラムの書き方が異なる.

<pythonのとき>
pip install selenium
<notebookのとき>
!python -m pip install selenium

動作実験(googleでの検索結果の取得) 

必要なモジュールをインポートする. 

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

driverのオプションを設定する. 

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')

chromedriverのパスを設定する. 

インストールしたchromedriver.exeの場所を指定する.

driver_path = "chromedriver-win64/chromedriver.exe"
service = Service(executable_path=driver_path)

driverを作成する. 

driver1 = webdriver.Chrome(service=service, options=options)
driver1.implicitly_wait(10)

urlの情報を取得する. 

url = "https://www.google.com/search?q=%E9%87%A3%E3%82%8A&oq=%E9%87%A3%E3%82%8A&gs_lcrp=EgZjaHJvbWUqCQgAEEUYOxiABDIJCAAQRRg7GIAEMgYIARAjGCcyBggCECMYJzINCAMQABiDARixAxiABDINCAQQABiDARixAxiABDINCAUQABiDARixAxiABDIGCAYQRRg9MgYIBxBFGD3SAQgxMTIxajBqNKgCALACAA&sourceid=chrome&ie=UTF-8"
driver1.get(url)

XPATHを使って要素を取得して表示. 

link = driver1.find_elements(By.XPATH, '//span/a/h3')
for i in link:
   print(i.text)

課題1 

すべて見るボタンをクリックしてスクレピングをする. 

all = driver1.find_element(By.XPATH, '/html/body/main/div[2]/div[4]/div[1]/div[1]/div[1]/a')
driver1.execute_script('arguments[0].click();', all)

要素をクリックする.ここでall.click()としてもよいが,クリック場所が画面外の場合に要素をクリックすることができずエラーになることがある.

課題2 

さらに,それぞれの要素をクリックして釣り情報の詳細を取得する. 

link = driver1.find_elements(By.XPATH, '/html/body/main/div/div/div[3]/div/a')
syousai = []
for i in range(len(link)):
   driver1.execute_script('arguments[0].click();', link[i])
   kikan = driver1.find_element(By.XPATH, '/html/body/main/div/div/div[2]/div[1]/div[2]/dl')
   syousai.append(kikan.text)
   driver1.back()
   link = driver1.find_elements(By.XPATH, '/html/body/main/div/div/div[3]/div/a')

取得した情報をデータフレームに入れる

import pandas as pd
kirei = syousai[0].replace('\u3000', '').split('\n')
syousai_df = pd.DataFrame([{'1' : kirei[i*2], '2' : kirei[i*2+1]} for i in 
range(int(len(kirei)/2))])

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS