環境構築からWEBアプリ開発・スマホアプリ開発まで。ときには動画制作やゲームも。

supilog
すぴろぐ

【PythonでWEBスクレイピング】スクレイピング結果をhtmlファイルに出力する(selenium)

【PythonでWEBスクレイピング】スクレイピング結果をhtmlファイルに出力する(selenium)

より複雑なスクレイピング処理を記述する時に、途中結果を確認したい時があります。そんなときはHTMLファイルに出力してみるのも一つの手!

ということで、ファイル出力してみます。

HTMLファイル出力

今回は以下のようなログイン処理を行った後に出力してみる。スクリプトは長ったらしいですが出力処理はちょっとです

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import sys
import time
import toml
# 設定読み込み
config = toml.load('config.toml')
# Chrome Driver
chromedriver_path = config['common']['driver_path']
options = webdriver.ChromeOptions()
options.add_argument('--headless')
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service,options=options)
driver.set_script_timeout(5)
# ログイン画面
print("ログイン画面")
driver.get(config['common']['url_base'])
# 表示待機
print("【開始】ログイン画面表示待ち")
WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.ID, "hogehoge")))
print("【終了】ログイン画面表示待ち")
# ログインステップ
print("ログインステップ")
login_id = driver.find_element(By.ID, "username")
login_id.send_keys(config['login']['id'])
login_password = driver.find_element(By.ID, "password")
login_password.send_keys(config['login']['pw'])
login_next = driver.find_element(By.NAME, "submit")
login_next.click()
#htmlで出力
html = driver.page_source
soup = BeautifulSoup(html, "html.parser")
file = open('result.html', 'w')
file.write(str(soup))
file.close()
from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.select import Select from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import sys import time import toml # 設定読み込み config = toml.load('config.toml') # Chrome Driver chromedriver_path = config['common']['driver_path'] options = webdriver.ChromeOptions() options.add_argument('--headless') service = Service(executable_path=chromedriver_path) driver = webdriver.Chrome(service=service,options=options) driver.set_script_timeout(5) # ログイン画面 print("ログイン画面") driver.get(config['common']['url_base']) # 表示待機 print("【開始】ログイン画面表示待ち") WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.ID, "hogehoge"))) print("【終了】ログイン画面表示待ち") # ログインステップ print("ログインステップ") login_id = driver.find_element(By.ID, "username") login_id.send_keys(config['login']['id']) login_password = driver.find_element(By.ID, "password") login_password.send_keys(config['login']['pw']) login_next = driver.find_element(By.NAME, "submit") login_next.click() #htmlで出力 html = driver.page_source soup = BeautifulSoup(html, "html.parser") file = open('result.html', 'w') file.write(str(soup)) file.close()
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import sys
import time
import toml

# 設定読み込み
config = toml.load('config.toml')

# Chrome Driver
chromedriver_path = config['common']['driver_path']
options = webdriver.ChromeOptions()
options.add_argument('--headless')
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service,options=options)
driver.set_script_timeout(5)

# ログイン画面
print("ログイン画面")
driver.get(config['common']['url_base'])

# 表示待機
print("【開始】ログイン画面表示待ち")
WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.ID, "hogehoge")))
print("【終了】ログイン画面表示待ち")

# ログインステップ
print("ログインステップ")
login_id = driver.find_element(By.ID, "username")
login_id.send_keys(config['login']['id'])
login_password = driver.find_element(By.ID, "password")
login_password.send_keys(config['login']['pw'])
login_next = driver.find_element(By.NAME, "submit")
login_next.click()

#htmlで出力
html = driver.page_source
soup = BeautifulSoup(html, "html.parser")
file = open('result.html', 'w')
file.write(str(soup))
file.close()

ファイル出力に必要なのはこの部分

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
file = open('result.html', 'w')
file.write(str(soup))
file.close()
file = open('result.html', 'w') file.write(str(soup)) file.close()
file = open('result.html', 'w')
file.write(str(soup))
file.close()

これでHTMLを確認することが出来ます。

まとめ

わたしの場合は、HTMLファイルを確認してみると、結果的にはログインに使用するIDとパスワードが間違っていてログイン失敗していました(笑)確認してみるもんですね!