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

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

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

データベース

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

907閲覧

sqlite構文エラーを解決したいです。

jury_new

総合スコア31

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

データベース

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/05 14:18

編集2020/09/05 14:49

wikipediaで情報をスクレイピングをしデータベースに保存しようとしております。
ですが、以下のエラーが出ております。
この解決方法をご教示頂けますと幸いです。

####詳細
なんの構文エラーが出ているのかもわからない状態です。
こちらは、本で学習したものを応用したものでコードの解説が特になくコードの中で無意味だと考えたものは全て端折りました。
調べようとしたのですがrecordsとsqliteを組み合わせたデータベースの操作方法に関して検索してもあまり出てこないため困っている所です。

python3

1 2import requests 3from bs4 import BeautifulSoup 4import re 5import records 6from sqlalchemy.exc import IntegrityError 7 8 9url = "https://ja.wikipedia.org/wiki/%E6%98%A0%E7%94%BB%E4%BD%9C%E5%93%81%E4%B8%80%E8%A6%A7" 10r = requests.get(url) 11html_soup = BeautifulSoup(r.text,"html.parser") 12db = records.Database('sqlite:///database/movies.db') 13for base in html_soup.find("ul").find_all("li"): 14 db.query('''CREATE TABLE IF NOT EXISTS url( 15 url text PRIMARY KEY, 16 visited_at datetime NULL)''') 17 18#タイトルのスクレイピング 19def scrape_movies_title(): 20 for title in base.find_all("a"): 21 movies_title = title.get_text(strip=True) 22 print(movies_title) 23 24#リンクをスクレイピング 25def scrape_movies_links(): 26 for links in base.find_all("a"): 27 links.get("href") 28 print(links) 29 30def s(url): 31 db.query('''INSERT INTO url (url,created_at) 32 VALUES (:url,CURRENT_TIMESTAMP)''',url=url) 33s(scrape_movies_links) 34 35#データベース上でのスクレイピングデータの取扱 36def get_random_unvisited_link(): 37 db.query('''SELECT * FROM url 38 WHERE visited_at IS NULL 39 ORDER BY RANDOM() LIMIT 1''').first() 40 return None if scrape_movies_links() is None else scrape_movies_links() 41 42#データがない場合を想定したコード 43url_to_visit = get_random_unvisited_link() 44while url_to_visit is not None: 45 print("Now scraping:",url_to_visit) 46 new_links = scrape_movies_links() 47 t = 1 48 t += 1 49 print(t,"new_links_found")

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

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

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

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

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

Y.H.

2020/09/05 14:42

せっかく回答したのに、質問タイトルと内容をまったく別の物に書き換えないでください。 別の事象が発生したのであれば別の質問にしてください。
jury_new

2020/09/05 14:42

大変申し訳ありません、ただいま戻します。
jury_new

2020/09/05 14:53

お待たせして申し訳ありません。 内容を戻させて頂きました。 今後このようなことがないように致します。 せっかくご回答頂いたのに大変申し訳ありません。
guest

回答2

0

まず、wikilediaをスクレイピングしてはいけませんし、データが提供されているのでする必要もありません。

Wikipedia:データベースダウンロード
を参照して下さい。

SQLエラーとしては
Y.H.さんの回答通り、テーブルが必要です。

投稿2020/09/05 14:40

tanat

総合スコア18713

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

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

jury_new

2020/09/05 14:51

ご回答ありがとうございます。 エラーが解決いたしました。 大変助かります。
guest

0

ベストアンサー

INSERT文にテーブル名がありません。

SQL

1-- INSERT INTO (url,created_at) 2INSERT INTO url(url,created_at)

投稿2020/09/05 14:27

Y.H.

総合スコア7914

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

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

jury_new

2020/09/05 14:35

ご回答ありがとうございます。全然気づきませんでした笑 大変助かります。大変恐縮ですが、別のエラーで詰まってしまいなんとか勧めたのですがこのような状態(コードを更新します)になっております。こちらの解決方法に関してご教示頂いてもよろしいでしょうか。
Y.H.

2020/09/05 14:41

せっかく回答したのに、質問タイトルと内容をまったく別の物に書き換えないでください。 別の事象が発生したのであれば別の質問にしてください。
jury_new

2020/09/05 14:51

せっかくご回答頂いたのに大変申し訳ありません、内容を変更致しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問