python Seleniumで取得したデータ 既存のスプレッドシートに追加したい
解決したいこと
最近seleniumの勉強を始め、適当に求人サイトの会社名を取り出して、Googleで検索かけて会社の住所と電話番号を取得を実施しました。
そのデータをスプレッドシートに出力まではできたのですが
↑が昨日できました。
しかし、本日実施した際に既存のデータに追加したいのですが、追加の方法が分かりません。
ご教授お願いいたします
発生している問題・エラー
エラーはなし
該当するソースコード
import pandas
import requests
import time
from bs4 import BeautifulSoup
import csv
import pandas as pd
from gspread_dataframe import set_with_dataframe
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
from time import sleep
browser = webdriver.Chrome(ChromeDriverManager().install())
# タウンワーク飲食全般
#url = 'https://townwork.net/joSrchRsltList/?sac=52102&jc=001&emc=01&emc=06&page=1'
# コンビニ、レジ、スーパー
url = 'https://townwork.net/joSrchRsltList/?jmc=00208&jmc=00206&jmc=00221&sac=52102&emc=01&emc=06&page=1'
#url = 'https://www.google.com/search?q=%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%E3%81%9B%E3%81%84%E3%81%98%E3%81%A4%E5%B1%8B&rlz=1C5GCEM_enJP1016JP1017&oq=%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%E3%81%9B%E3%81%84%E3%81%98%E3%81%A4%E5%B1%8B&aqs=chrome..69i57j0i512l4.331j0j7&sourceid=chrome&ie=UTF-8'
browser.get(url)
res = requests.get(url)
#parser = 分割的な意味
soup = BeautifulSoup(res.text, 'html.parser',from_encoding='utf-8')
#soup
page_count = 1
page = soup.find_all('ol', attrs={'class': 'pager-number'})
#会社名取得
p = soup.find('span', attrs={'class': 'hit-num'})
p = int(p.text.replace(',',''))
p = -(-p // 30)
lists = []
adress = []
periods = []
while True:
res = requests.get(url)
soup = BeautifulSoup(res.text, 'html.parser',from_encoding='utf-8')
title = soup.find_all('h3', attrs={'class': 'job-lst-main-ttl-txt'})
period = soup.select('div.job-lst-main-entry')
for list in title:
list = list.text
list = list.strip()
list = list.replace("\u3000", '')
lists.append(list)
for z in period:
period = z.text
period = period.strip()
period = period.replace("\n",'')
period = period.replace("掲載期間終了まであと7日",'')
period = period.replace("掲載期間終了まであと6日",'')
period = period.replace("掲載期間終了まであと5日",'')
period = period.replace("掲載期間終了まであと1日",'')
period = period.replace("キープしましたキープするキープ済み応募画面へ進む",'')
periods.append(period)
page_count += 1
time.sleep(5)
#飲食全般
#url = 'https://townwork.net/joSrchRsltList/?sac=52102&jc=001&emc=01&emc=06&page=' + str(page_count)
#コンビニ、レジ、スーパー
url = 'https://townwork.net/joSrchRsltList/?jmc=00208&jmc=00206&jmc=00221&sac=52102&emc=01&emc=06&page=' + str(page_count)
browser.get(url)
if page_count > 1:
break
#except TimeoutException:
print('pageの読み込みを終了しました')
#取得した会社名を元に検索かけていく
phone_numbers = []
titles = []
adress = []
for title in lists:
titles.append(title)
key_word = title
url = 'https://www.google.com/search?q=' + key_word +'電話番号'
browser.get(url)
#電話番号取得
if browser.find_elements_by_class_name('X0KC1c'):
phone_number = browser.find_elements_by_class_name('X0KC1c')
adres = browser.find_elements_by_css_selector('span[class="LrzXr"]')
for d in adres:
adres = d.text
adress.append(adres)
for c in phone_number:
phone_number = c.text
phone_numbers.append(phone_number)
time.sleep(3)
else:
phone_numbers.append('')
adress.append('')
time.sleep(1)
#このタイミングでスプレッドシートに出力したいデータをまとめる
df = pd.DataFrame()
df['会社名'] = titles
df['掲載期間'] = periods
df['電話番号'] = phone_numbers
df['住所'] = adress
df
#スプレッドシートに出力するための記述
SCOPES = ["https://spreadsheets.google.com/feeds",
'https://www.googleapis.com/auth/spreadsheets',
"https://www.googleapis.com/auth/drive.file",
"https://www.googleapis.com/auth/drive"]
SERVICE_ACCOUNT_FILE = '******.json'
credentials = ServiceAccountCredentials.from_json_keyfile_name(SERVICE_ACCOUNT_FILE, SCOPES)
gs = gspread.authorize(credentials)
SPREADSHEET_KEY ='**********'
workbook = gs.open_by_key(SPREADSHEET_KEY)
#シート作成(新規)(新規で作成する場合)
workbook.add_worksheet(title="コンビニ_レジ_スーパー", rows=430, cols=10)
#先程作成したシートに出力
#既存のデータに追加する場合worksheet名を既存の名前にしたのですが、上書きされるだけで追加はできない
#dfの値を既存のデータに追加したい
set_with_dataframe(workbook.worksheet("コンビニ_レジ_スーパー"), df, include_index=True)
自分で試したこと
既存の全てのデータを持ってきて何かをすればいいのかな?と思いましたけど
解決方法が分からず、、、
pd.DataFrame(worksheet.get_all_values())
上記の記述で持ってきて、下記dfと組み合わせなど何か方法があれば、、
set_with_dataframe(workbook.worksheet("コンビニ_レジ_スーパー"), df, include_index=True)
ご教示お願いします。
0