mixhostでpythonを動かし、スクレイピングした後にデータベースに追加する方法を解説[conda-forgeのチャンネル追加]

onda install -c anaconda beautifulsoup4

mixhostでpythonを操作してスクレイピングを行い
mixhostのデータベースに追加する方法を解説していきます。

youtubeでも解説動画を出しています。併せてご視聴い下さい。

必要なライブラリをインストールする

mixhostでpythonを操作する方法は前回の記事を参考にして下さい。

In-Output

mixhostでpythonを使えるようにする方法を解説しています。…

今回使うライブラリは「requests」「Beautiful Soup 4」「mysql-connector-python」の3つです。
まずはこれらをインストールしていきましょう。

※注意
mixhostでanacondaの環境を構築しているなら必ずcondaコマンドでライブラリをインストールしてください。
pipも使用できますが、最悪サーバーの環境が壊れてしまう可能性があります。

requests

conda install -c anaconda requests

Beautiful Soup 4

conda install -c anaconda beautifulsoup4

mysql-connector-python

conda install -c anaconda mysql-connector-python

requests」と「Beautiful Soup 4」は何の問題もなくインストールできると思いますが、「mysql-connector-python」に関してはこのようなエラーが出る場合があります。

何やらバージョンがなんちゃら言われてますが、これはcondaでライブラリをインストールする時のあるあるです。

デフォルトのcondaのチャンネルにはライブラリのパッケージはそこまで豊富に用意されているわけではなく、目的のライブラリが存在していないことや、使用しているバージョンとマッチしているバージョンのライブラリが用意されていないことはよくあります。

mysql-connector-pythonがインストールできなかった場合の対処法

mysql-connector-pythonがインストールできなかった時の対処法はいくつか考えられます。

先述したpipによるインストールもその一つですが、ローカル環境ならともかくレンタルサーバーであるmixhost内では使わないほうがいいでしょう。っていうか使わないでください。

次の手段として環境を変える方法が考えられます。
pyenvで別のバージョンのanaconda環境を構築する。anaconda環境内に別のバージョンのpython環境を構築する等です。

しかし、今回はconda-forgeを使ってmysql-connector-pythonをインストールする方法を紹介します。

conda-forgeでは様々なライブラリがバージョン毎に豊富に用意されています。
まずはデフォルトの状態でmysql-connector-pythonをcondaから検索してみましょう。

conda search mysql-connector-python

pkgs/mainというチャンネルにmysql-connector-pythonが存在しているんじゃないか?と思われますが、いったん無視して下さい。

続いて現在のチャンネルを調べます。

conda config --get channels

上記コマンドの結果、画像のようにdefaultsが表示される。または、何も表示されません。
lowest priorityは優先度が最も低いという意味ですけど、一つしかチャンネルがないので優先度が最も高いと同義です。

conda config --append channels conda-forge

conda config –append channels conda-forgeとする事でconda-forgeをチャンネルに追加します。

これでconda-forgeがチャンネルに追加されました。

appendとするとdefaultsの優先度の高さを維持しつつconda-forgeを追加できますが、conda-forgeの優先度を最も高くしたい場合にはaddとして下さい。

もう一度mysql-connector-pythonをサーチするとconda-forgeチャンネルより様々なバージョンが表示されております。

conda install -c anaconda mysql-connector-python

conda-forgeをチャンネルに追加する事により無事にmysql-connector-pythonをインストールする事が出来ました。

データベースの作成

mixhost内にデータベースを作成します。

MySQL データベース ウィザードを開いて

とりあえず、testとでもしておきます。ユーザー名がバッチリ見えちゃってますが気にしません。

手順を進めていきユーザーには全ての権限を与えておきます。

スクレイピングのテストを行う

mixhostでpythonを操作し、スクレイピングをしてみましょう。

import requests
from bs4 import BeautifulSoup


r = requests.get('https://tenki.jp/forecast/6/30/6200/27217/')


r.encoding = r.apparent_encoding


soup = BeautifulSoup(r.text, 'lxml')
weather = soup.select("#main-column > section > div.forecast-days-wrap.clearfix > section.today-weather > div.weather-wrap.clearfix > div.weather-icon > p")[0].text


print(weather)

このスクリプトを実行し

今日の天気が出力されればOKです。

データベースと接続する

まずはデータベースとの接続チェックを行います。

import mysql.connector

conn = mysql.connector.connect(
host='localhost',
user='ユーザー名',
password='パスワード',
database='データベース名'
)


print(conn.is_connected())

このコードを実行し、Trueと出力されれば、データベースとの接続は成功です。

データベースの操作テスト

一通りテストを行います。

テーブル作成

import mysql.connector

conn = mysql.connector.connect(
host='localhost',
user='ユーザー名',
password='パスワード',
database='データベース名'
)

cur = conn.cursor()
conn.ping(reconnect=True)

print(conn.is_connected())
cur.execute("DROP TABLE IF EXISTS `test_table`")
cur.execute("""CREATE TABLE IF NOT EXISTS `test_table` (
`id` int(8) NOT NULL,
`name` varchar(128) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci""")

コード実行後に確認を行います。

cPanelからphpMyAdminを選択し

先ほど作成したtestデータベースを開き、test_tableが作成されている事を確認。

test_tableを確認し、idとnameのカラム名を確認。

続いてデータの挿入を確認

import mysql.connector

conn = mysql.connector.connect(
host='localhost',
user='ユーザー名',
password='パスワード',
database='データベース名'
)

cur = conn.cursor()
conn.ping(reconnect=True)

print(conn.is_connected())

cur.execute("INSERT INTO test_table VALUES (1, %s)", ("test", ))
conn.commit()

実行結果としてレコードが確認できればOK。

スクレイピングした内容をデータベースに追加

いよいよスクレイピングした内容をデータベースに追加します。
といってもこれまでのコードをくっつけるだけですが

import mysql.connector
import requests
from bs4 import BeautifulSoup
conn = mysql.connector.connect(
host='localhost',
user='ユーザー名',
password='パスワード',
database='データベース名'
)

cur = conn.cursor(buffered=True)
conn.ping(reconnect=True)

print(conn.is_connected())

r = requests.get('https://tenki.jp/forecast/6/30/6200/27217/')

r.encoding = r.apparent_encoding

soup = BeautifulSoup(r.text, 'lxml')
weather = soup.select("#main-column > section > div.forecast-days-wrap.clearfix > section.today-weather > div.weather-wrap.clearfix > div.weather-icon > p")[0].text


cur.execute("INSERT INTO test_table VALUES (2, %s)", (weather, ))
conn.commit()
cur.close()
conn.close()

実行結果↓

今日の天気が追加されています。

まとめ

今回はmixhostでpythonを操作して、スクレイピングの結果をデータベースに登録する方法を解説しました。

 data-src=

プログラミング情報サイト「In-Output」

当サイトではプログラミング言語の情報を発信しています。
HTMLやCSSのマークアップ言語の学習方法や解説、WordPressでのサイト開設方法、python等のプログラミング言語を使用して日頃の作業の効率化等、皆様のお役に立てるサイトを目指しています。

CTR IMG