質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

0回答

904閲覧

スクレイピングで取得したデータがデータベースにうまく反映されない

sarusnnn

総合スコア1

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2021/08/07 14:24

編集2021/08/07 14:25

前提・実現したいこと

abemaの番組表から画像やタイトルを取得し,mysqlデータベースに保存するといった処理を行いたい。

発生している問題・エラーメッセージ

seleniumスクレイピングの実行後xamppのmysqlデータベースの中身を確認したところ格納されておりませんでした。

MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | channelapp | | information_schema | | test | +--------------------+ 3 rows in set (0.010 sec) MariaDB [(none)]> use channelapp; Database changed MariaDB [channelapp]> show tables from channelapp; Empty set (0.004 sec)

該当のソースコード

データベースへの格納に関するコードは次のように作成しました。

python

1def data_registration_songle(self): 2 connection=mysql.connector.content( 3 user='ユーザー名', 4 password='パスワード', 5 host='localhost', 6 database='channelapp', 7 charset='utf8', 8 ) 9 10 cursor=connection.cursor() 11 cursor.excute("""CREATE TABLE timetable_list( 12 id INT(5) AUTO_INCREMENT NOT NULL, 13 title_name VARCHAR(100) 14 time datetime, 15 title_img MEDIUMBLOB, 16 )""") 17 cursor.commit() 18 cursor.ecxute("USE timetable_list") 19 connection.commit() 20 21 for item in data: 22 cursor.excute('insert into time values(%(title)s,%(time)s,%(img)s)',{ 23 'title':item['title_name'], 24 'time':item['time'], 25 'img':item['title_img'], 26 }) 27 cursor.commit() 28 cursor.close()

全体のコード

python

1from typing import Container, Counter 2import urllib.request 3from selenium.webdriver.chrome.options import Options 4from selenium import webdriver 5from time import sleep 6import mysql.connector 7 8options = Options() 9options.add_argument('--headless') 10 11 12driver = webdriver.Chrome('C:/Users/ユーザー名/Downloads/chromedriver_win32/chromedriver',chrome_options=options) 13 14driver.get('https://abema.tv/timetable') 15sleep(10) 16driver.find_element_by_xpath("//button[contains(text(),'19歳以下')]").click() 17driver.find_element_by_xpath("//button[contains(text(),'男性')]").click() 18driver.find_element_by_xpath("//button[contains(text(),'次へ')]").click() 19sleep(10) 20driver.find_element_by_class_name("com-genre-survey-GenreSurveyCard__text").click() 21driver.find_element_by_xpath("//button[contains(text(),'完了')]").click() 22sleep(10) 23categories=driver.find_elements_by_xpath("//a[@class='com-timetable-ChannelIconHeader__channel-link com-a-Link com-a-Link--dim']") 24link_list = [] 25 26channel_count = 0 27for category in categories: 28 link_list.append(category.get_attribute('href')) 29 30data=[] 31count=0 32for link in link_list: 33 count+=1 34 driver.get(link) 35 sleep(10) 36 timetable=driver.find_elements_by_xpath("//div[@class='com-timetable-TimetableItem__wrapper']") 37 cnt=0 38 for item in timetable: 39 cnt+=1 40 #タイトル 41 title=item.find_elements_by_xpath("div[1]/div/p/span/div/span") 42 if len(title): 43 title_name=str(count)+":"+str(cnt)+":"+title[0].text 44 45 #時間 46 times=item.find_elements_by_xpath("div[1]/div/p/span/div/time") 47 if len(times): 48 for time in times: 49 datetime=time.get_attribute('datetime') 50 time=str(count)+":"+str(cnt)+":"+datetime 51 52 #画像 53 imgs=item.find_elements_by_xpath("div[2]/div/div/div/picture/img") 54 if len(imgs): 55 for img in imgs: 56 src=img.get_attribute('src') 57 title_img=urllib.request.urlretrieve(src,str(count)+"_"+"img"+str(cnt)+".png") 58 59 data.append({ 60 "title_name":title_name, 61 "time":time, 62 "title_img":title_img, 63 }) 64 65 if cnt>3: 66 break 67 68 if count>3: 69 break 70 71def data_registration_songle(self): 72 connection=mysql.connector.content( 73 user='ユーザー名', 74 password='パスワード', 75 host='localhost', 76 database='channelapp', 77 charset='utf8', 78 ) 79 80 cursor=connection.cursor() 81 cursor.excute("""CREATE TABLE timetable_list( 82 id INT(5) AUTO_INCREMENT NOT NULL, 83 title_name VARCHAR(100) 84 time datetime, 85 title_img MEDIUMBLOB, 86 )""") 87 cursor.commit() 88 cursor.ecxute("USE timetable_list") 89 connection.commit() 90 91 for item in data: 92 cursor.excute('insert into time values(%(title)s,%(time)s,%(img)s)',{ 93 'title':item['title_name'], 94 'time':item['time'], 95 'img':item['title_img'], 96 }) 97 cursor.commit() 98 cursor.close()

補足情報(FW/ツールのバージョンなど)

Python 3.9.5
selenium 3.141.0
ChromeDriver 92.0.4515.107
xampp 8.0.9 / PHP 8.0.9

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gentaro

2021/08/08 01:01

デバッグを丸投げしたいって事だろうから低評価。 デバッグしてるならどの部分が意図どおりに動いていないのか、もっとピンポイントで質問絞れるはず。
m.ts10806

2021/08/08 01:09

そもそもスクレイピングしていいかどうか微妙な気がしますね。 https://abema.tv/about/terms >第8条(禁止事項) >(4)コンテンツを不正な方法で取得する行為、またはこれを助長する行為。 「不正」が何かを決めるのは運営側ですが、一般的な利用以外は避けた方が良いでしょう。欲しい情報を提供しているAPIがなく、どうしてもというのなら許可を得ること。
sarusnnn

2021/08/08 01:35

わかりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問