前提・実現したいこと
こんにちわ。python初学者です。
seleniumでスクレイピングしたデータをsqlite3を使ったデータベースで一つ一つfor文で回してスクレイピングしたデータを取得していきたいのですが、下記のようなエラーが出てしまいます。シンタックスエラーということでいろいろコードを見直しても直りません。
そして、スクレイピングはできているようなのですが、データベースに格納することができません、、、これは根本的に大幅にコードが間違っているんでしょうか?(テーブルとカラムはできてそうです。)
下記のようなエラーはどこのコード部分を直せば良いでしょうか??すいませんお力いただきたいです。
よろしくお願いします。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "/Users/uu/Pycha/so/sample.py", line 50, in <module> insert_data(table_create, test) File "/Users/uu/Pycha/so/sample.py", line 41, in insert_data c.execute(insert, date) sqlite3.OperationalError: near "<": syntax error
from selenium import webdriver import chromedriver_binary from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.options import Options import sqlite3 options = Options() options.headless = True options.add_argument('--headless') db = "sample.db" conn = sqlite3.connect(db) c = conn.cursor() table_name = "テーブル名" def get_date(): driver = webdriver.Chrome(options=options) driver.get("webサイトURL") selector = '要素' element = driver.find_elements_by_css_selector(selector) for a in element: b = a.get_attribute("href") print(b) date_element = "要素" date = driver.find_elements_by_css_selector(date_element) for c in date: d = c.text print(d) def tab(ta): t = """create table if NOT EXISTS {} (we varchar(64), date varchar(32));""".format(ta) c.execute(t) def inda(ta, date): insert = 'insert into {} (we, date) values (?,?);'.format(ta, date) c.execute(insert, date) conn.commit() s = 'select * from {};'.format(table_name) for a in c.execute(s): print(a) conn.close() tab(table_name) test = get_date() inda(tab, test)
Python sqlite3
試したこと
関数なしでコードを書きましたがそちらでも詰まってしまいました。
def inda(ta, date): insert = 'insert into {} (we, date) values (?,?);'.format(ta, date) print(insert) print(date) c.execute(insert, date) conn.commit()
この関数の中の
c.execute(insert, date)
の前に
print(insert)
print(date)
こちらを出力しましたが同じエラーが出てしまいした。。。
補足情報(FW/ツールのバージョンなど)
python3.7 mac10.15 pycharm
回答2件
あなたの回答
tips
プレビュー