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

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

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python

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

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

Q&A

解決済

2回答

7156閲覧

PythonでスクレイピングしたデータをMySQLに挿入する

kawa-kami

総合スコア20

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python

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

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

0グッド

3クリップ

投稿2017/05/16 11:21

初歩的な質問になるかと思いますが、教えて頂けますと幸いです..
PythonでスクレイピングしたデータをMySQLに挿入しようとしているのですが、
1つのページで取得したデータが大量の場合の挿入の仕方が分からず困っております。

例をあげると、
http://www.python-izm.com/contents/external/mysql.shtml#a002
このページみたいに1つ1つを挿入していく方法はわかるのですが、
hrefリンクとタイトルを100個ぐらい抜き出した際にそれをPythonの画面上からそのまま一気にMySQLに挿入する事はできるのでしょうか。

それとも、一度Pythonで取得したデータを一度CSVに保存し、
CSVからMySQLに一気に挿入するという手順を踏まないといけないのでしょうか?
(↑このCSVからMySQLへの挿入は本でなんとなく把握してます)

よろしくお願い致します。
初心者のため、なるべく簡単な方法でやってみたいと思ってます。

イメージとしては、毎日あるサイトからURLとタイトルを1oo程取得し、
MySQLに納入した上(20日間分ほど保存しておく)でphpでwebに指定データを並び替えて表示させようと思ってます。

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

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

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

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

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

honami

2017/05/16 11:26

大量のデータ、はPython上でどのように扱われている前提ですか?辞書ですか?配列ですか?
kawa-kami

2017/05/16 14:20

ご丁寧にありがとうございません。とても助かります。データに関してはスクレイピングで抜き出しに成功した段階でして、どういう形でデータを求めればいいのか、どう並び変えればいいのか今調べている所になります。。。hrefとそのタイトルの抜き出しだけ成功している段階です。答えになっておりますでしょうか。
guest

回答2

0

ベストアンサー

csvに一度保存する、というアイデアがどこから来たのかはわかりませんが、
単一のデータであれ、大量のデータであれPython上からMySQLを操作することは可能です。(簡単な話スクレイピング結果が含まれる変数とSQL文を組み合わせるだけです。)
csvを経由する必要はないどころか、csvに保存したところでそのcsvを読み出し、そこからSQL文を作成する役目は結局誰かがしなければならないことなので特別な意味をなさないです。
一気に挿入のようなことは、Pythonが気にすることではなく、そのようなSQL文を作成するかどうかであり、Pythonとの連携よりも先にまずはMySQLの操作について理解するべきだと思います。

投稿2017/05/16 11:50

honami

総合スコア308

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

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

kawa-kami

2017/05/16 14:22

ありがとうございます。 CSVに一度保存する >こちらはネットで調べていて、CSVからMySQLに挿入する方法があったため、一度CSVにPythonから入れればいいのかと思っておりました... ありがとうございます。とても参考になります。 MySQLの操作もさらっと読んだだけでして...これから勉強していきます。
kawa-kami

2017/05/22 12:41

度々失礼致します。。 質問があるのですが、PythonからMySQLへの格納において参考になる本やサイト等教えて頂けますでしょうか。 "基礎からのMySQL"という本を買って読んだのですが、具体的にPythonからMySQLへのリストや辞書の登録方法や、その他のやり方等は載っておらず、何か参考になるものをご存知であれば教えて頂ければと思っております。 初歩的な質問で申し訳ございません。 よろしくお願い致します。
honami

2017/05/22 13:30

10.5.5 MySQLCursor.executemany() Method https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-executemany.html 私がまず最初に参考にするのは常に「公式ドキュメント」です。 ほとんどの場合、そこに知りたいことすべてが書かれています。これはMySQLに関わらず何をするときでも同じです。 ただ、英語で書かれてある場合がほとんどであるので、それが問題になるかもしれません。 しかし、コードは英語だろうと日本語だろうと同じですから、何が行われているかをざっくり把握することはできるでしょう。もちろん英語が読めれば理解は早いです。 上を前提に日本語で書かれた文献を少し探してみました。 lxmlを用いたスクレイピングと、MySQLへの保存 http://qiita.com/sue_charo/items/cc2b0758bf549f0dbb29#python-%E5%81%B4%E3%81%AE%E5%87%A6%E7%90%86 質問とやりたいことが似ているのはこのようなものでしょう(lxmlを用いていますが、beautifulsoupだろうとSQLを操作する部分は変わりません) 上の記事ではexecutemanyを用いてlist型のデータをMySQLに保存しています。 PythonからMySQLを使う http://qiita.com/mas9612/items/5423c09efd613518a521 この記事ではさらに小さなコードで datas = [ (2, 'foo'), (3, 'bar') ] をMySQLに登録するところを確認できます。 キーワードとしては「execute」「executemany」などが知りたい情報であると思います。 これらを踏まえて公式ドキュメントに目を通すとある程度の理解につながるかもしれません。
kawa-kami

2017/05/23 09:28

ありがとうございます。とても参考になります。 頂いたページ確認しました。 executemanyこれがキーワードになってきますね。ドキュメントを見ながら進めて行こうと思います。ありがとうございます。 公式ドキュメントに全てが書かれているというアドバイスもありがとうございます。本を必死に探しておりました....感謝です。 まず進めてみます。ありがとうございました。
guest

0

mysqlで挿入を軽くするのであればバルクインサートでしょう
INSERT INTO テーブル VALUES(・・・),(・・・),(・・・)・・・
となるよSQL文を整形してデータ投入してください

投稿2017/05/16 11:36

yambejp

総合スコア114581

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

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

kawa-kami

2017/05/16 14:23

バルクインサートというのを使用すると軽くなるのですね。ありがとうございます。SQLを理解できるようにして進めていきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問