##前提・実現したいこと
Beautiful Soup4でGyaoのアニメのタイトルとURLを取得し、Google spread sheetsに書き込みたいと考えています。
1回の実行ですべての情報を取得し、一括してGoogel spread sheetsに書き込むことはできるでしょうか。
現状は、各カテゴリー(一挙配信中のアニメ,現在テレビ放送中の春アニメなど)のアニメのタイトルとURLを1つずつ取得し、Googel spread sheetsに書き込んでいます。
情報の取得、一括で書き込みのどちらかでも構いません。
よろしくお願いします。
##該当のソースコード
python
1from bs4 import BeautifulSoup 2import requests 3import time 4 5import gspread 6import json 7from oauth2client.service_account import ServiceAccountCredentials 8from googleapiclient import discovery 9 10 11scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'] 12credentials = ServiceAccountCredentials.from_json_keyfile_name('伏せておきます', scope) 13gc = gspread.authorize(credentials) 14SPREADSHEET_KEY = '1DxPdf4JAcQp5LmKAEmBX2wuYW1j4ckva53Tnwm_byBg' 15worksheet = gc.open_by_key(SPREADSHEET_KEY) 16wb = worksheet.sheet1 17 18 19 20url = 'https://gyao.yahoo.co.jp/ct/anime/' 21r = requests.get(url) 22 23soup = BeautifulSoup(r.text, 'html.parser') 24 25 26section1 = soup.find_all('h2', class_ = 'section-header-title') 27 28sections = soup.find_all('div', class_='item-carousel-container') 29 30 31header_titles = [] 32for i in section1: 33 sec = i.text 34 header_titles.append(sec) 35 36anime_titles = [] 37for section in sections: 38 section_ = section.find_all('p') 39 anime_titles.append(section_) 40 41url_lists = [] 42for section in sections: 43 section_ = section.find_all('a') 44 url_lists.append(section_) 45 46 47wb.update_cell(1, 1, header_titles[0]) 48wb.update_cell(1, 3, header_titles[1]) 49for i in range(2,10,2): 50 wb.update_cell(1, i, 'URL') 51 52time.sleep(3) 53 54def anime_title_function(list_num, column): 55# for list_num in range(2,5): 56# for文で入れ子にして実行すると、spread sheetに書き込みの途中でエラーが出る。 57 anime = [] 58 for i in anime_titles[list_num]: 59 if list_num == 2: 60 animeTitle_ = i.string 61 animeTitle_ = animeTitle_.split('【一挙配信】')[1] 62 anime.append(animeTitle_) 63 else: 64 title = i.string 65 anime.append(title) 66 67 rows = [] 68 for i in range(2,len(anime)+2): 69 rows.append(i) 70 71 for row, title in zip(rows, anime): 72 wb.update_cell(row, column, title) 73anime_title_function(3, 3) 74 75 76time.sleep(3) 77 78def anime_url_function(list_num, column): 79 Anime_URL = [] 80 for i in url_lists[list_num]: 81 url_ = i.get('href') 82 Anime_URL.append(url_) 83 84 rows = [] 85 for i in range(2,len(Anime_URL)+2): 86 rows.append(i) 87 88 for row,url in zip(rows,Anime_URL): 89 wb.update_cell(row, column, url) 90anime_url_function(3, 4)
##試したこと
update_cellsでやってみましたが、1列ずつなら書き込めました。
これだと、update_cellとあまり変わりません。
python
1anime = [] 2for i in anime_titles[2]: 3 if 2 == 2: 4 animeTitle_ = i.string 5 animeTitle_ = animeTitle_.split('【一挙配信】')[1] 6 anime.append(animeTitle_) 7 else: 8 title = i.string 9 anime.append(title) 10 11anime1 = [] 12for i in anime_titles[3]: 13 title = i.string 14 anime1.append(title) 15 16 17cell_list = wb.range('A2:A'+str(len(anime)+2)) 18cell_list1 = wb.range('B2:B'+str(len(anime)+2)) 19 20for cell,cell1,a,a1 in zip(cell_list, cell_list1, anime,anime1): 21 cell.value = a 22 cell1.value = a1 23wb.update_cells(cell_list) 24wb.update_cells(cell_list1)
##worksheet.updateでやってみた
python
1anime1 = [] 2 for i in anime_titles[2]: 3 animeTitle_ = i.string 4 animeTitle_ = animeTitle_.split('【一挙配信】')[1] 5 anime1.append(animeTitle_) 6 7 anime2 = [] 8 for i in anime_titles[3]: 9 title = i.string 10 anime2.append(title) 11 12 anime3 = [] 13 for i in anime_titles[4]: 14 title = i.string 15 anime3.append(title) 16 17 anime4 = [] 18 for i in anime_titles[5]: 19 title = i.string 20 anime4.append(title) 21 22 23 rows = [] 24 for i in range(2, 20): 25 rows.append(i) 26 27 for row, a1,a2,a3,a4 in zip(rows, anime1, anime2, anime3, anime4): 28 wb.update('A:G'+str(row), [[a1,'' , a2, '', a3, '', a4]])
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/05/22 04:30
2020/05/22 05:36
退会済みユーザー
2020/05/23 05:41 編集
退会済みユーザー
2020/05/26 03:04