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

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

ただいまの
回答率

88.19%

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

解決済

回答 2

投稿

  • 評価
  • クリップ 3
  • VIEW 4,908

kawa-kami

score 20

初歩的な質問になるかと思いますが、教えて頂けますと幸いです..
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に指定データを並び替えて表示させようと思ってます。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • honami

    2017/05/16 20:26

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

    キャンセル

  • kawa-kami

    2017/05/16 23:20

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

    キャンセル

回答 2

checkベストアンサー

+4

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/16 23:22

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

    キャンセル

  • 2017/05/22 21:41

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

    キャンセル

  • 2017/05/22 22: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」などが知りたい情報であると思います。
    これらを踏まえて公式ドキュメントに目を通すとある程度の理解につながるかもしれません。

    キャンセル

  • 2017/05/23 18:28

    ありがとうございます。とても参考になります。
    頂いたページ確認しました。
    executemanyこれがキーワードになってきますね。ドキュメントを見ながら進めて行こうと思います。ありがとうございます。

    公式ドキュメントに全てが書かれているというアドバイスもありがとうございます。本を必死に探しておりました....感謝です。
    まず進めてみます。ありがとうございました。

    キャンセル

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/16 23:23

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

    キャンセル

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

  • ただいまの回答率 88.19%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る