Pythonでスクレイピングする

Python

前提

  • Windows 10
  • Python 3.9.7
  • Google Chrome 94.0.4606.81
  • ChromeDriver 94.0.4606.61

仮想環境

設定

変数名(Variable name):PIPENV_VENV_IN_PROJECT
値(Variable value):True

作成

mkdir scraping_test
cd scraping_test
pipenv --python 3

スクレイピング

ChromeDriver インストール

scoop install chromedriver

Python ライブラリ インストール

pipenv install selenium
pipenv install beautifulsoup4

基本形

import time 
from selenium import webdriver
 
# 仮想ブラウザ起動、URL先のサイトにアクセス 
driver = webdriver.Chrome() 
driver.get('https://www.google.com/') 
time.sleep(2) 
# サイト内から検索フォームを探す。 
# Googleでは検索フォームのNameが「q」です。 
el = driver.find_element_by_name("q") 
# 検索フォームに文字を入力 
el.send_keys('tamurat.com') 
time.sleep(2) 
# 検索フォーム送信(Enter) 
el.submit() 

from bs4 import BeautifulSoup 
soup = BeautifulSoup(driver.page_source, features="html.parser") 
# タイトルをターミナル上に表示 
print(soup.title.string)

ブラウザ非表示バージョン

import time 
from selenium import webdriver 
from selenium.webdriver.chrome.options import Options

# オプションに非表示などの設定を追加することができる
op = Options() 
op.add_argument("--disable-gpu") 
op.add_argument("--disable-extensions") 
op.add_argument("--proxy-server='direct://'") 
op.add_argument("--proxy-bypass-list=*") 
op.add_argument("--start-maximized") 
op.add_argument("--headless") 
driver = webdriver.Chrome(chrome_options=op) 
driver.get('https://www.google.com/') 
time.sleep(2) 
# サイト内から検索フォームを探す。 
# Googleでは検索フォームのNameが「q」です。 
el = driver.find_element_by_name("q") 
# 検索フォームに文字を入力 
el.send_keys('tamurat.com') 
time.sleep(2) 
# 検索フォーム送信(Enter) 
el.submit() 
from bs4 import BeautifulSoup 
soup = BeautifulSoup(driver.page_source, features="html.parser") 
# タイトルをターミナル上に表示 
print(soup.title.string)

要素が表示されるまで待機

import time 
from selenium import webdriver 
from selenium.webdriver.chrome.options import Options 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By 
from bs4 import BeautifulSoup 

# ChromeDriverオプション 
op = Options() 
op.add_argument("--disable-gpu") 
op.add_argument("--disable-extensions") 
op.add_argument("--proxy-server='direct://'") 
op.add_argument("--proxy-bypass-list=*") 
op.add_argument("--start-maximized") 
op.add_argument("--headless") 
driver = webdriver.Chrome(chrome_options=op) 
# Google検索画面 
# 検索ボタンが表示されるまで待機 
driver.get('https://www.google.com/') 
WebDriverWait(driver, 30).until( 
    EC.presence_of_element_located((By.CSS_SELECTOR, 'input[name="btnK"]')) 
) 
# サイト内から検索フォームを探す。 
# Googleでは検索フォームのNameが「q」です。 
el = driver.find_element_by_name("q") 
# 検索フォームに文字を入力 
el.send_keys('tamurat.com') 
time.sleep(2) 
# 検索フォーム送信(Enter) 
el.submit() 
soup = BeautifulSoup(driver.page_source, features="html.parser") 
# タイトルをターミナル上に表示 
print(soup.title.string)

参考

実践/現場のPythonスクレイピング - Qiita
https://qiita.com/ulwlu/items/c84501993635c72540a7