LoginSignup
19

More than 5 years have passed since last update.

PythonでスクレイピングしてDBへ

Posted at

はじめに

webサイトの情報を取得し解析したい
そんな考えから、PythonでスクレイピングしてDBに保存
ある程度たまったら解析しようとなった

その手順をまとめたもの(備忘録的な)

動作環境

・Windows7 64bit
・Python 3.6
・MySQL 8.0.12

スクレイピング

 手順

 1. モジュールのインストール
 2. 指定URLからHTML情報の取得
 3. HTMLから指定の情報を取得

 モジュールのインストール

 ・URLに接続しHTML情報を取得するためにはrequestsモジュールが必要
 ・早速インストール 

コマンドライン
$ py -m pip install requests

*Windows環境ではpy -mを入力しないといけない

 指定URLからHTML情報の取得

 requestsモジュールをインストールしたので、実際に取得していきます。

import requests

res = requests.post("URL")
res.encoding = res.apparent_encoding

html = res.text

equests.post("URL")でpost通信で接続経路を作成
res.apparent_encodingで接続先のエンコードを取得し設定
res.textでHTML情報を取得

これでHTML情報の取得ができました
ここから欲しい情報を取得していきます

HTMLから指定の情報を取得

取得したHTMLからタグを指定して表示されている情報を取得します
今回は指定タグの情報を取得する関数を作成しました。

def getTagInfo(html, ntag):
    #タグ定義
    stag = "<" + ntag + ">"
    etag = "</" + ntag +  ">"

    #取得タグ
    tagList = []

    #HTML情報を改行コードで区切る
    lhtml = html.split("\n")

   for l in lhtml:
       ifl.find(stag) != -1 and l.find(etag) != -1 and l.count("<") == 2:
           l = l.strip(stag)
           l = l.strip(etag)
           tagList.append(l)

    return tagList  

引数のhtmlにHTML情報、ntagに取得するタグ名を設定
HTML情報から、指定されたタグで囲まれ、他にタグがない行を取得し
その行のタグを排除する
この関数でhtml内の欲しい情報を取得できます。

この関数を使い

import requests

res = requests.post("URL")
res.encoding = res.apparent_encoding

html = res.text

h1list = getTagInfo(html, "h1")
plist = getTagInfo(html, "p")

欲しい情報をHTML情報から取得する

DBに登録

手順

1.モジュールのインストール
2.MySQLに接続

モジュールのインストール

 ・MySQLに接続するのにmysql-connectorモジュールが必要
 ・早速インストール 

コマンドライン
$ py -m pip install mysql-connector

*Windows環境ではpy -mを入力しないといけない

MySQLに接続

import mysql.connector

connect = mysql.connector.connect(host="ホスト名", port="ポート番号", db="DB名", user="ユーザ名", password="パスワード")
ctrl = connect.cursor()

ctrl.execute("SQL")

mysql.connector.connectを使用し、MySQLとの接続経路を確保
connect.cursor()を使用し、接続したMySQLの操作権を獲得(カーソル的なイメージ?)
ctrl.execute("SQL")で、SQLを実行

これで、取得した情報を登録できます。

まとめ

・HTML,MySQLの接続関連に関してはあやふやな部分も多いが、実際に接続することができた
  ⇒あやふやなので、間違った接続をしているかもしれない
・実際にHTMLから欲しい情報を取得しDBへ登録することができるようになった
  ⇒しかし、タグ基準なので取得漏れがありそう
   今後は、上手く取得できる方法を考えていく

・今回は備忘録的な感じで作成したので、とりあえずこれでいいと思う

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19