PythonからRustへ!スクレイピングツール開発で感じた驚きと苦労
他人の作ったライブラリを効率的に扱うことができました。入力や出力の型が決まっているので定義ジャンプすればそれがどんな型なのか、どんな関数が用意されてるのか見ることができます。ソースコードも非常に読みやすいです。 trai […]
Filter by Category
他人の作ったライブラリを効率的に扱うことができました。入力や出力の型が決まっているので定義ジャンプすればそれがどんな型なのか、どんな関数が用意されてるのか見ることができます。ソースコードも非常に読みやすいです。 trai […]
Vue.jsとFlaskでSPA(Single Page Application) 普段はフロント側を書く機会がほとんど無いのですが、プロジェクトをモダンなフレームワークに順次対応していきたいと思い、勉強を兼ねてVue. […]
コマンドラインからPyCharmを起動する Pythonで開発する時は必ず使っているJetBrains社のPyCharmですが、全部入りのIDEであるが故に仮想環境やフレームワークの自動設定などのサポートが手厚いことがか […]
tcp 0.0.0.0:5000: bind: address already in use FlaskやFastAPIで開発することも増えてきたので5000番のポートを使用する機会が増えました。Djangoで開発する時 […]
Flaskで発生するsignal only works in main threadの解決方法 Flaskで開発中のアプリケーションを起動すると以下のエラーが発生する場合があります。このエラーは、Flaskではmain関 […]
AWS Cloud9にPython3.9をインストール AWSのCloud9(Ubuntu)にはデフォルトでPython 3.6.9がインストールされています。 openaiに必要なpandasのインストール opena […]
PyCharmで.txtファイルで発生するRequirementsTokenTypeというエラー PyCharmで拡張子が.txtファイルを開くとエディタに以下のようなエラーが発生します。 PyCharmでは.txtはr […]
お名前.comからXserver Domainにドメイン移管 年末や年度末になるとサーバーやドメインの新規契約や更新の時期ですよね。その時々で費用や使いやすさを重視してサービスを選んだ結果、別々の会社で管理されているドメ […]
AWSのCloud9を使ってPythonのプログラミング研修を開催 2022年11月から2023年2月までの期間で、群馬県庁職員を対象にしたDXを促進するためのPythonによるプログラミング研修を開催しました。現在、群 […]
ConoHa WINGからロリポップにWordPressを引っ越し WordPressを運営していくと処理できるアクセス数やコストなど、様々な理由でサーバーの移行を考えるタイミングがあります。今までWordPressの移 […]
AttributeError: module ‘numpy’ has no attribute ‘float’ numpyを使ったライブラリをコマンド実行した際に以下のエラ […]
YouTube APIキーの取得方法 普段はログインフォームにIDとパスワードを入力してログインしていたサービスでもAPIが提供されていれば、Pythonなどのプログラムからコンテンツのアップロードや取得といった操作を行 […]
2022年に最も読まれた記事ランキング あけましておめでとうございます2023年もどうぞよろしくお願いします ファントムでは「情報技術で人々の暮らしを豊かにする」という企業理念で、2023年も皆様のお役に立てるよう精進し […]
Sentryのエラー検知をSlackに通知 前回に引き続き、今回はSentryとSlackの連携方法について説明します。 SentryとSlackの連携機能は導入する決め手となった理由の一つです。デフォルトではメールアド […]
コピペでOK! エラー検知・監視でSentryを導入 システムを運用していくうえで避けては通れないシステムの監視とエラーの検知ですが、ファントムではSentryというサービスを利用しています。SentryとSlackを連 […]
PythonからDeepLのAPIを使って翻訳 最先端のAI技術を使った世界最高レベルの機械翻訳のDeepLをAPIで操作します。deeplのライブラリを使うとPythonで書く通常のPOSTのコードよりも記述量を少なく […]
rembgで背景を削除した画像を編集して元の画像と再合成 YouTubeにアップロードしたrembgで背景を削除する説明動画にコメントをいただいたので、rembgを使った画像処理の続編です。rembgで背景を削除した画像 […]
Rembgで画像から背景を削除 先日、SNSで見た画像の背景を削除して切り抜くPythonのライブラリを見つけたので早速試してみました。普段業務で画像の背景を処理することも多くソフトを使って背景を削除していたので、Pyt […]
競艇で実装した戦略を紹介します。 1着率を正規化 まず試したのはそれぞれの選手の1着率を全試合から計算してそれをその試合ごとに正規化する方法です。 期待値はオッズと確率の積で表せるので、確率を計算することで相対的にどの券 […]
MacにGoProをウェブカメラとして認識させてOpenCVで使う MacとGoProを繋ぎ、GoProをウェブカメラとして認識させてOpenCVに映像を入力します。今回は映像を取り込んで画面に表示するだけですが、Pyt […]
PythonからRustへ!スクレイピングツール開発で感じた驚きと苦労
今回は、スクレイピングツールをPythonからRustに書き換えた経験と感想をお伝えしたいと思います。 スクレイピングとは、Webサイトから自動的にデータを取得することです。私は最近Rustというプログラミング言語に興味を持ちました。そこで、以前Pythonで作ったスクレイピングツールをRustに書き換えてみることにしました。 この記事では、私が実装したスクレイピングツールの機能や仕組み、PythonとRustの比較や開発体験、書き換えて変わった点などを紹介します。スクレイピングやプログラミングに興味がある方はぜひ読んでみてください。
私が実装したスクレイピングツールは以下の4つの機能を持っています。
PythonからRustへ書き換える過程で感じたことは大きく分けて2つあります。一つはPythonとRustそれぞれの強みや弱みです。もう一つはどんな場面でどちらが有利かです。
Pythonは非常に使いやすい言語です。情報が多くて殆どライブラリが用意されているので、小規模な場合はPythonで書く方が楽で速いです。また、動的型付け言語なので型宣言やコンパイルが不要です。 しかし、Pythonにも欠点があります。コードリーディングが困難です。自分で書いたコードでも引数や返り値が何か分からなくなったりします。そのためdocstring(関数や変数などにコメント付ける機能)を拡充させる必要があります。
Rustは静的型付け言語です。コンパイル時に型チェックやメモリ管理など厳密なチェックが行われます。そのおかげで安全性やパフォーマンスが高いです。
しかし、Rustにも欠点があります。情報の少なさです。日本語記事は殆どありません。ライブラリの使い方自体はソースコードを読めば良いですが、特にRustをAWS lambda(サーバーレスコンピューティングサービス)に載せる時などは情報がなく非常に苦労しました。 また、ライブラリも未完成のものだったり、そもそも存在しなかったりすることもあります。その場合は自分で書く必要があります。
私はPythonとRust両方使ってみて得られた知見は以下のようなものです。
以上、スクレイピングツールをPythonからRustへ書き換えた経験と感想をお伝えしました。 私はRustの高速さや安全さ、読みやすさや使いやすさに感動しました。しかし、情報の少なさやライブラリの不足などもありました。 私は今後もRustで開発することを考えていますが、プロジェクトの規模や目的に応じてPythonも使っていきたいと思います。 最後まで読んでくださりありがとうございました。
群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。
メーリングリストに登録するとファントムの最新情報をお届けします
お客様のメールアドレスを共有することはありません