1. plumfield56

    No comment

    plumfield56
Changes in body
Source | HTML | Preview

目次

Beautiful Soupの使用方法

文字化け解消方法

requestsを使用する場合は通常下記のように書くと思いますが、

from bs4 import BeautifulSoup
import requests

res = requests.get(url)
soup = BeautifulSoup(res.content, 'html.parser')

これだと文字化けするサイトがあるので、下記にすると文字化けがかなり解消できる。

from bs4 import BeautifulSoup
import requests

res = requests.get(url)
soup = BeautifulSoup(res.content, "lxml", from_encoding='utf-8')

findのコード一覧

説明 コード例
1件検索 soup.find('li')
タグ全検索 soup.find_all('li')
属性検索 soup.find('li', href='html://www.google.com/')
複数要素を取得 soup.find_all(['a','p'])
id検索 soup.find('a', id="first")
class検索 soup.find('a', class_="first")
属性取得 first_link_element['href']
テキスト検索 soup.find('dt' ,text='検索ワード')
テキスト部分一致の検索 soup.find('dt' ,text=re.compile('検索ワード'))
親要素を取得 .parent
次の要素を1件取得 .next_sibling
次の要素を全件取得 .next_siblings
前の要素を1件取得 .previous_sibling
前の要素を全件取得 .previous_siblings
テキスト要素の取得 .string

selectのコード一覧

説明 コード例
1件検索 soup.select_one('cssセレクタ')
全件検索 soup.select('cssセレクタ')

セレクタの指定方法一覧

説明 コード例
id検索 soup.select('a#id')
class検索 soup.select('a.class')
classの複数検索 soup.select('a.class1.class2')
属性検索1 soup.select('a[class="class"]')
属性検索2 soup.select('a[href="http://www.google.com"]')
属性検索3 soup.select('a[href]')
子要素の取得 soup.select('.class > a[href]')
子孫要素の取得 soup.select('.class a[href]')

属性要素は検索したい要素に応じて変更する。
id,class,href,name,summaryなど。
子要素(1階層下)だけ取得したい場合は>を挟み、子孫要素(階層下全て)を取得したい場合はスペースを入れる。

Seleniumの使用方法

Seleniumを使うための事前準備

Colabで使用する際はSeleniumのダウンロードとUIの仕様ができないので、
その設定が必要になります。

# Seleniumを使用するのに必要なライブラリをダウンロード
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium

from selenium import webdriver

# ドライバーをUIなしで使用するための設定
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver',options=options)
driver.implicitly_wait(10)

SeleniumとBeautiful Soupを使用する場合

使用ケースとしては、Beautiful Soupだけではどうしても要素が取得できない場合に
seleniumuでページを読み込んでからBeautiful Soupで必要な情報を抜きたい場合。

driver.get(url)
html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html, 'html.parser')

Seleniumの基本コード

説明 コード例
URLを開く driver.get('URL')
一つ前に戻る driver.back()
一つ前に進む driver.forward()
ブラウザを更新 driver.refresh()
現在のURLを取得 driver.current_url
現在のタイトルを取得 driver.title
現在のウィンドウを閉じる driver.close()
全てのウィンドウを閉じる driver.quit()
クラスで要素取得 driver.find_element_by_class_name('classname')
IDで要素取得 driver.find_element_by_id('id')
XPATHで要素取得 driver.find_element_by_xpath('xpath')
要素をクリック driver.find_element_by_xpath('XPATH').click()
テキスト入力 driver.find_element_by_id('ID').send_keys('strings')
テキストの取得 driver.find_element_by_id('ID').text
属性の取得 driver.find_element_by_id('ID').get_attribute('href')
要素が表示されているか判定 driver.find_element_by_xpath('xpath').is_displayed()
要素が有効か判定 driver.find_element_by_xpath('xpath').is_enabled()
要素が選択されているか判定 driver.find_element_by_xpath('xpath').is_selected()

ドロップダウンを選択したいとき

from selenium.webdriver.support.ui import Select

element = driver.find_element_by_xpath("xpath")
Select(element).select_by_index(indexnum) # indexで選択
Select(element).select_by_value("value") # valueの値
Select(element).select_by_visible_text("text") # 表示テキスト

Xpathの指定方法一覧

説明 コード例
全ての要素を選択 //*
全ての要素を選択 //a
属性を選択 @href
複数要素を選択 [a or h2]
idで要素取得 //*[@id="id"]
classで要素取得 //*[@class="class"]
テキスト検索 //*[text()="strings"]
テキストの部分検索 //*[contains(text(), "strings")]
クラスの部分一致 //*contains(@class, "class")
次のノード取得 /following-sibling::*[1]
2つあとのa要素の /following-sibling::a[2]
後ろのノード取得 /preceding-sibling::*[1]

その他ノードの取得方法はこちらを参考にする

タブを変更する場合

クリックするとページ遷移せず新しいタブができる場合に使用

handle_array = driver.window_handles
driver.switch_to.window(handle_array[1])

特定の要素が表示されるまで待機処理

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

WebDriverWait(driver, 30).until(
  EC.presence_of_element_located((By.XPATH, 'xpath')))
)

クリックできないときの処理

target = driver.find_element_by_xpath('xpath')
driver.execute_script("arguments[0].click();", target)

Pandasの使用方法

データフレームを作成してデータを追加していく方法

import pandas as pd
columns = ['項目1', '項目2', '項目3', '項目4', '項目5']
df = pd.DataFrame(columns=columns)

# データ取得の処理

se = pd.Series([data1, data2, data3, data4, data5], columns)
df = df.append(se, columns)

Pandasのデータをダウンロードする場合

from google.colab import files

filename = 'filename.csv'
df.to_csv(filename, encoding = 'utf-8-sig') 
files.download(filename)

Pandasのデータをマイドライブに保存する場合

from google.colab import drive

filename = filename.csv'
path = '/content/drive/My Drive/' + filename

with open(path, 'w', encoding = 'utf-8-sig') as f:
  df.to_csv(f)

スプレッドシートを扱う方法

スプレッドシートを扱うための事前準備

# スプレッドシート連携するのに必要なライブラリをダウンロード
!pip install gspread

from google.colab import auth
from oauth2client.client import GoogleCredentials
import gspread

# 認証処理
auth.authenticate_user()
gc = gspread.authorize(GoogleCredentials.get_application_default())

よく使用するコード

ss_id = 'スプレッドシートのID'
sht_name = 'シート名'

workbook = gc.open_by_key(ss_id)
worksheet = workbook.worksheet(sht_name)

# データ取得するとき
worksheet.acell('B1').value
worksheet.cell(2, 1).value

# アップデートするとき
worksheet.update_cell(row, column, '更新内容')

gspreadのコード一覧

ワークブックの操作

説明 コード例
IDでスプレッドシートの選択 gc.open_by_key('ID')
URLでスプレッドシートの選択 gc.open_by_url('URL')
スプレッドシートのタイトル取得 workbook.title
スプレッドシートのID取得 workbook.id

シートの操作

説明 コード例
シート名でシートを取得 workbook.worksheet('シート名')
Indexでシートを取得 workbook.get_worksheet(index)
全シートを配列で取得 workbook.worksheets()
シート名の取得 worksheet.title
シートIDの取得 worksheet.id

セルの操作

説明 コード例
A1方式でデータ取得 worksheet.acell('B1').value
R1C1方式でデータ取得 worksheet.cell(1, 2).value
複数セルを選択して一次元配列で取得 worksheet.range('A1:B10')
選択行のデータ取得 worksheet.row_values(1)
選択行の数式取得 worksheet.row_values(1,2)
選択列のデータ取得 worksheet.column_values(1)
選択列の数式取得 worksheet.column_values(1,2)
全データを取得 worksheet.get_all_values()
A1方式でセルの値を更新 worksheet.update_acell('B1','更新する値')
R1C1方式でセルの値を更新 worksheet.update_cell(1,2,'更新する値')

【参考サイト】
BeautifulSoup4のチートシート(セレクターなど)
Python3メモ - BeautifulSoup4のあれこれ
WebスクレイピングのためのCSSセレクタの基本
Selenium webdriverよく使う操作メソッドまとめ
XPathとは?XPathの基本知識を学ぼう!
Webスクレイピングに不可欠!Xpathのまとめ
gspreadライブラリの使い方まとめ!Pythonでスプレッドシートを操作する