souwasora
@souwasora (takei souwa)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

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

No Answers yet.

Your answer might help someone💌