#author("2023-12-06T17:57:35+00:00","","")
#author("2023-12-06T17:58:23+00:00","","")
[[平井のゼミ]]

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

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

*環境 [#h82a02b0]
Python 3.11 64bitで行う.(他でも可)&br;
seleniumはバージョン4を用いる。
**準備 [#j661bc61]
***ChromeDriverのインストール [#j661bc61]
まず、ChromeDriverをインストールする.自身のGoogleChromeのバージョンを確認し,それに合ったバージョンをインストールする.
(https://chromedriver.chromium.org/downloads)。
***seleniumのインストール [#j661bc61]
seleniumをインストールする.バージョン3でもよいが,プログラムの書き方が異なる.&br;
 <pythonのとき>
 pip install selenium
 <notebookのとき>
 !python -m pip install selenium

*動作実験(googleでの検索結果の取得) [#h82a02b0]
**必要なモジュールをインポートする. [#h00fd477]
 from selenium import webdriver
 from selenium.webdriver.common.by import By
 from selenium.webdriver.chrome.service import Service
**driverのオプションを設定する. [#b380d497]
 options = webdriver.ChromeOptions()
 options.add_argument('--headless')
 options.add_argument('--no-sandbox')
 options.add_argument('--disable-dev-shm-usage')
--headless ヘッドレスモード(バックグラウンドで起動)
--no-sandbox sandboxモードを解除する(クラッシュ回避)
--disable-dev-shm-usage パーティションが小さすぎることによる、クラッシュを回避する。
**chromedriverのパスを設定する. [#b380d497]
インストールしたchromedriver.exeの場所を指定する.
 driver_path = "chromedriver-win64/chromedriver.exe"
 service = Service(executable_path=driver_path)
**driverを作成する. [#b380d497]
 driver1 = webdriver.Chrome(service=service, options=options)
 driver1.implicitly_wait(10)
--implicitly_wait(10) 指定した時間要素が見つかるまで待機.

**urlの情報を取得する. [#b380d497]
 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を使って要素を取得して表示. [#b380d497]
 link = driver1.find_elements(By.XPATH, '//span/a/h3')
 for i in link:
    print(i.text)

*課題1 [#bb5c41a2]
**すべて見るボタンをクリックしてスクレピングをする. [#s10f289d]

 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 [#bb5c41a2]
**さらに,それぞれの要素をクリックして釣り情報の詳細を取得する. [#s10f289d]

 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