コード一覧

【Python】スクレイピングしてスプレッドシートに情報を入れる

スプレッドシートとpythonを連携させられるjsonを設定済み
チャットワークのAPIキーを取得済み
が前提です。

自社サイトの商品名と値段をスプレッドシートへ自動で入れたいという時に使いました。

# coding: utf-8
from oauth2client.service_account import ServiceAccountCredentials
import json
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import sys
import requests
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
import shutil
import os
import subprocess


scope = ['https://spreadsheets.google.com/feeds']


#ダウンロードしたjsonファイル名を記入
json_file = 'xxxxxxxxxxxxxxx.json'
#スプレッドシートIDを記入
sheet_id = 'xxxxxxxxxxxxxxxx'
#スプレッドシートのシート名を記入
sheet_name = 'sheet'

# jsonを読みに行き、スプレッドシートと連携
credentials = ServiceAccountCredentials.from_json_keyfile_name(json_file, scope)
gc = gspread.authorize(credentials)
sp = gc.open_by_key(sheet_id)
worksheet = sp.worksheet(sheet_name)

# 任意の列をクリアする
cell_list = worksheet.range("A5:B300")# 任意の列分クリア
for cell in cell_list:
    cell.value = ''
worksheet.update_cells(cell_list)


def keyword_search(keyword):
    # URLを開く
    options = Options()
    options.add_argument('--headless')
    driver = webdriver.Chrome('C:/Users/ユーザー名/Downloads/chromedriver_win32/chromedriver', chrome_options=options)
    url1 = '取得したいページのURL'+検索したいキーワード(keyword)
    driver.get(url1)

    
    # 商品の値段をリストへ入れる
    price_list=[]
    price_select = driver.find_elements_by_class_name("値段がはいっているクラス名")
    for i in price_select:
        price = i.text
        price_list.append(price)

    # price_listの中身の個数を数える
    range_count = len(price_list)+4
    # price_listの分だけ、入力したいセル数を指定する
    range_count = str(range_count)
    range_counts = "A5:A"+range_count
    cell_list = worksheet.range(range_counts)
    # 指定したセル分だけprice_listの値段をスプレッドシートへ入力していく。
    for i, val in enumerate(price_list): 
        cell_list[i].value = str(val) 
    worksheet.update_cells(cell_list)



    # 商品名をリストへ入れる
    name_list=[]
    name_select = driver.find_elements_by_class_name('商品の名前が入っているクラス')
    for i in name_select:
        name = i.text
        name_list.append(name)

    # name_listの中身の個数を数える
    range_count = len(name_list)+4
    # name_listの分だけ、入力したいセル数を指定する
    range_count = str(range_count)
    range_counts = "B5:B"+range_count
    cell_list = worksheet.range(range_counts)

    # 指定したセル分だけname_listの値段をスプレッドシートへ入力していく。
    for i, val in enumerate(name_list): 
        cell_list[i].value = str(val) 
    worksheet.update_cells(cell_list)

keyword_search('検索したいキーワード')

情報さえ引っ張ってきたら、値段の数字はスプレッドシートで加工するイメージです。
円を抜いたり、文字列から数値に変換したりなど。

selenium
参考にしたURL
https://kurozumi.github.io/selenium-python/locating-elements.html