My Tech Life

Memo by a Japanese Software Developer in his late 50s.

ブラウザとPythonを連携させてWebスクレイピング例

以前、urllibを使ったWebスクレイピング例を投稿したが、

セッションがあると、扱うのが難しくなってくる。

 

Seleniumを使って、ブラウザを利用すると、

セッションが扱いやすくなる。

 

以下サンプルでは、

xpath_listに、URL、XPATH、検索文字列、を設定する。

xpath_listでループして、ブラウザを通して、HTMLを取得する。

BS4を使って、戻ってきたHTMLをテキストに変換している。

 

リストに設定するXPATHを取得する一般的な方法は、

ブラウザ付属のウェブ開発ツールで、

入力したい位置を指定し、コピーメニューで、XPATHをコピーする。

 

#!/usr/bin/env python3
# -*- coding: utf8 -*-

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import re
from bs4 import BeautifulSoup

# URL, Xpath, QueryString
xpath_list = [
        ['https://www.yahoo.co.jp', '/html/body/div/div/header/section[1]/div/form/fieldset/span/input', 'Selenium'],
        ['https://dev.to', '/html/body/header/div/div[1]/form/div/div/input', 'Selenium']
]

for elem in xpath_list:
    driver = webdriver.Firefox()
    # URL
    driver.get(elem[0])

    # Xpath
    xpath = elem[1]
    m = driver.find_element(by=By.XPATH, value=xpath)

    # QueryString
    m.send_keys(elem[2])
    m.send_keys(Keys.ENTER)

    html = driver.page_source
    time.sleep(1)

    soup = BeautifulSoup(html, 'html.parser')
    text_source = soup.get_text()
    for l in text_source.split('\n'):
        # skip empty line
        if re.search(r'^\s*$', l):
            continue
        else:
            print(l)

    driver.quit()
    time.sleep(1)