【解決】mixhostでpythonプログラムでスクレイピングを定期実行

内容に広告・プロモーションを含みます

お勉強(ついでにちょっとした小遣い稼ぎをしたいなーという邪な気持ち)で、
ちょっとしたプログラムを書いています。

全体像はこんな感じ

  1. RSSなど、どこかから発売予定の商品情報を抽出して、DBに登録する(スクレイピング1)
  2. 1で保存したデータについて、ダメと言われていないショッピングサイトにて販売の有無を確認
    (スクレイピング2)
  3. 販売が始まったものがあれば、自分のPCにメール通知
  4. 将来的にはSeleniumなどでアフィリエイトリンクをツイートしたい(ここはやっていいのかも未確認)

スクレイピングの勉強目的です。

あ、使っている言語はpythonです。
Beautiful Soupとか、有名どころを使って実装しています。

ダメと言われていないショッピングサイトと書いているのは、利用規約に明確にダメ、と書いているサイトがあるからです。

Amazonとか、サブカル民御用達のあみあみ辺りはダメだったはずです。

この記事を書いている時点で、②と③についてはとりあえずローカルで動くものができました。

winでタスクスケジューラを使って定期的に自動実行させることもできますが、それだと自宅のPCを付けっぱなしでないといけません。

PCの寿命が縮むし、電気代がかかるのは嫌だ。

っちゅうことで、このブログを乗っけるために使用しているレンタルサーバ(mixhost)上にプログラムを配置して、自動実行させることを試してみました。

目次

mixhostでpython3を動かす

こちらを参考にpython3を動かせる環境を準備。
先達に感謝。
操作をミスると環境を壊す恐れはあるので、オペレーションミスは気を付けてください。
オペミスがなくても、ネットワークのエラーなどでちょいちょいおかしくなる可能性はあるので、自己責任でやってくださいね。

python3の仮想環境を用意したうえでどんなことをしたか、備忘として書いてみます。

とりあえず、ファイルパスの指定をべた書きしていたので、その辺りの書き換えなど、メールが送れないなど色々ありましたが、
サーバ上でプログラムを実行できるところまでは来ました。
(メールが送れないのは解決していませんが、最終的な目的はツイートbotなので、一旦スルーすることに。)

ところが、同じプログラムをcronに仕込んで実行するとプログラムが動いてくれません。

なんでや

あ、cronはLinuxサーバ上で、自動的・定期的に特定のプログラムを実行する仕組みです。
基本知っている方向けに書いています。不親切でごめんね。

ターミナルから同じプログラムを実行しても動くのにどうちて!

んで、cronの実行ログを見えるように「>>」や「2>&1」をつけ足して、標準出力とエラー出力をファイルに書き出して確認すると

SyntaxError: invalid syntax

文法があかんと言われました。

いやいや、ターミナルから実行したら動いたじゃん

なんでや

何となく当たりはついてる(たぶん実行するバージョンの問題)だけど、もう夜遅いのでまた今度。

後日:いけた

思った通りバージョンの問題でした。

cronで実行するシェルスクリプトにpython –versionを追記してバージョンを確認したところ、python2になっていました。
実行したいのはpython3環境下で実装したものなので、やっぱりおかしい。

シェルスクリプト内に環境変数の設定をする記述を挿入。

export PATH=/home/【アカウント名】/.pyenv/versions/anaconda3-2021.11/bin:$PATH

私の場合は上記に加えてPYTHONPATHの設定もしています。

これでcronが定期に自動実行されることを確認できました。
やったね!

別ブログでPLの転職活動についてまとめました

最近転職しまして、システム開発のマネージャ職からコンサルタントになりました。

別ブログにて、自分自身の転職活動を通して転職活動開始のきっかけから現職の退職調整まで一通りまとめた記事を書いています。
気合を入れてまとめてますので、是非見てみてください。
特に漠然と転職を考えているシステム開発界隈の方には参考になる内容になっていると思います。

コンサルと言ってもSEくらい様々な人が名乗る職種なので、転職後の仕事の内容についても私自身わかり次第紹介していこうと思います。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

33歳、サラリーマンで元営業職で中間管理職(プロジェクトリーダー)
ちょっと(だいぶ)ふっくら。
嫁さん大好き。
貯金を頑張りたい

目次