Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】boss职位监控

2025年09月26日に「Dev.to」が公開したITニュース「boss职位监控」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

このシステムは、Pythonでウェブサイトを自動操作し、求人サイトからブロックチェーン関連職を探す。Cloudflare認証を突破して、キーワードや給与で求人をフィルタリング。既出情報を除き、見つけた求人情報を自動で通知する仕組みだ。

出典: boss职位监控 | Dev.to公開日:

ITニュース解説

このプログラムは、Pythonというプログラミング言語を使って、Webサイトから特定の情報を自動的に収集し、その情報を必要な人に通知するシステムについて解説している。システムエンジニアを目指す人にとって、Webサイトから情報を自動で集める「Webスクレイピング」は、Webサービスの仕組みやデータ処理、自動化の技術を学ぶ上で重要な題材となる。

プログラムの中心的な部分を担うのはBossAlertというクラスである。このクラスは、情報収集のための初期設定を行う。具体的には、収集した情報を一時的に保存したり、同じ情報を何度も通知しないように重複を防いだりするために使う「Redis」という高速なデータベースに接続する設定、Webサイトにアクセスする際に自分の身元を隠したり、アクセス制限を回避したりするための「プロキシ(代理サーバー)」の設定、そして情報を取得したい求人サイトのURLや、収集した情報を通知するチャットツールのURLなどがここにまとめられている。

Webサイトから情報を集める際、プログラムが自動でアクセスしていることをWebサイト側に見破られると、アクセスがブロックされてしまうことがある。特に「Cloudflare」のようなセキュリティサービスを利用しているWebサイトでは、人間とロボットを区別するための「チャレンジ」と呼ばれる認証を求められることが頻繁にある。このプログラムでは、_get_turnstile_framecookiesdetect_challengesolve_challengedetectといった一連の関数が、このCloudflareのチャレンジを検知し、自動的に突破するためのロジックを実装している。これは、画面に表示されるボタンをクリックしたり、特定の要素が表示されるまで待ったりといった、あたかも人間が操作しているかのような動作をプログラムで行うことで、セキュリティチェックをパスしようとするものだ。

Webサイトの操作にはasync_playwrightというライブラリが使われている。これは「Playwright」という、Webブラウザを自動で操作するための強力なツールを非同期で扱うためのものだ。非同期処理とは、複数の作業を同時に効率よく進めるためのプログラミング手法であり、Webサイトからのデータ取得のように時間がかかる処理が多い場合に非常に有効である。プログラムは、Google Chromeのような実際のブラウザをバックグラウンドで起動し、指定されたURLにアクセスする。このとき、headless: Falseという設定により、ブラウザの画面が実際に表示される状態で動作する。これは、Cloudflareのようなセキュリティシステムが「画面のないブラウザはロボットである」と判断する可能性があるため、人間が使っているように見せるための工夫の一つだ。また、user_agentという設定で、自分が使っているブラウザの種類をWebサイトに伝えたり、特別なスクリプトを読み込ませたりすることで、自動操作ツールを使っていることをWebサイトに検知されにくくしている。

ブラウザがWebサイトにアクセスすると、様々な情報がWebブラウザとWebサーバーの間でやり取りされる。このプログラムでは、page.on('response', self.on_response)という部分で、ブラウザがWebサーバーから受け取るすべての「レスポンス(応答)」を監視している。そして、そのレスポンスの中に求人情報が含まれる特定のURLパターン(例えばjoblist.jsonのようなファイル名)があれば、そのデータを抽出し、parse関数に渡す。

parse関数が受け取ったデータは、通常、JSONという形式で構造化されている。この関数では、まずそのJSONデータから個々の求人情報を取り出す。そして、その求人情報が「スマートコントラクト」や「Solidity」といった特定のキーワードを含んでいるか、また給与が一定の金額(この例では20K、つまり20,000元以上)であるかといった条件でフィルタリングを行う。もし条件に合わない求人であれば、ログに出力して処理をスキップする。

さらに、同じ求人情報を何度も通知してしまわないように、「Redis」というデータベースを使って、既に通知した求人情報のIDを記録している。self.redis_cli.sismemberで、今見つけた求人情報が過去に通知済みかどうかを確認し、まだ通知していなければ、その求人情報の詳細(給与、職種、企業名、企業規模、都市名、求人ページのURLなど)を整形して、sender関数を使って「Lark」というチャットツールに通知を送る。通知が完了したら、その求人情報のIDをRedisに記録し、次回以降の重複通知を防ぐ仕組みになっている。

このプログラムは、複数の都市コード(求人検索の条件)を順番に巡回し、それぞれの都市の求人情報を収集する。すべての都市のチェックが終わると、ブラウザを閉じ、一連の処理が終了する。

プログラムの実行方法としては、開発環境であるlocal(自分のPC)で実行する場合と、「AWS(Amazon Web Services)」のようなクラウドサーバーで実行する場合とが用意されている。クラウド環境で実行する際には、サーバーに画面がなくてもブラウザを動作させるためのpyvirtualdisplayという仮想ディスプレイの仕組みが利用されている。また、@retryという機能は、何らかの理由で処理が失敗した場合に、自動的に何度か再試行する機能を提供し、プログラムの堅牢性を高めている。@scheduled_taskという機能は、この情報収集プログラムを定期的に(例えば20分ごとなど)自動実行するためのスケジューリング機能を提供している。

このように、このプログラムは、Webスクレイピングの基本的な技術だけでなく、非同期処理、プロキシの利用、セキュリティ対策の回避、データベース連携、ログ記録、通知システムの構築、スケジューリング、エラーハンドリングといった、現代のシステム開発で非常に重要となる多岐にわたる技術要素を組み合わせて作られている。システムエンジニアを目指す初心者にとっては、これらの技術がどのように連携し、一つの実用的なシステムを構築しているかを理解する上で、非常に良い学習材料となるだろう。

関連コンテンツ

関連IT用語