Webスクレイピングアプリケーション
Amazonの商品ページのURLを入力すると値段等がスクレイピングされDBに登録されます。
毎日11:00のバッチ処理時に登録してある商品の最新の値段をDBに保存、登録時の値段と比較し、
登録時よりも安くなっていた場合、メールピットにその商品の情報を送信します。
ユーザーはサービス利用時にメールアドレスとパスワードを登録する必要があり、登録商品はユーザーごとに管理されます。
Dockerを使用し、サーバー、DB初期テーブルを自動作成します。
(トップへ)
| 言語・フレームワーク | バージョン |
|---|---|
| Node.js | 20.16.0 |
| SpringBoot | 3.3.0 |
| SpringSecurity | 6.3.0 |
| Java | 17.0.2 |
| PostgreSQL | 16.4 |
| Docker | 25.0.3 |
| Apache Tomcat | 9.0.62 |
その他のパッケージのバージョンは package.json を参照してください
(トップへ)
❯ tree -a -I "node_modules|.next|.git|.pytest_cache|static" -L 3
. ├── .vscode │ ├── launch.json │ └── settings.json ├── README.md ├── demo │ ├── .gitignore │ ├── .gradle │ │ ├── 8.7 │ │ ├── buildOutputCleanup │ │ ├── file-system.probe │ │ └── vcs-1 │ ├── .settings │ │ ├── org.eclipse.buildship.core.prefs │ │ ├── org.eclipse.wst.common.component │ │ └── org.eclipse.wst.common.project.facet.core.xml │ ├── bin │ │ ├── main │ │ └── test │ ├── build │ │ ├── classes │ │ ├── generated │ │ ├── libs │ │ ├── reports │ │ ├── resolvedMainClassName │ │ ├── resources │ │ ├── test-results │ │ └── tmp │ ├── build.gradle │ ├── docker-compose.yml │ ├── gradle │ │ └── wrapper │ ├── gradlew │ ├── gradlew.bat │ ├── init.sql │ ├── server │ │ └── Dockerfile │ ├── settings.gradle │ ├── sql │ │ └── ddl_scraping.txt │ ├── src │ │ ├── main │ │ └── test │ └── web │ └── Dockerfile ├── img │ ├── login.png │ ├── register.png │ ├── scrape.png │ └── screen-transition.png ├── package-lock.json └── package.json
--- title: scraping-app --- erDiagram items { int id PK string url string item_name int price_original int price_latest int user_id FK } users { int id PK string username string password } users ||--o{ items :has sequenceDiagram participant User participant Application participant Database participant Application(batch) User ->> Application: ログイン activate Application Application -->> User: ログイン認証 deactivate Application User ->> Application: URL入力 activate Application Application ->> Database: 商品登録 deactivate Application activate Database Database ->> Application(batch): 商品情報 deactivate Database activate Application(batch) Application(batch) -->> Database: バッチ処理 deactivate Application(batch) activate Database Database -->> Application: 比較結果返却 activate Application deactivate Database Application -->> User: メール送信 deactivate Application (トップへ)
Ubuntuで以下のコマンドを入力する
docker compose -f "docker-compose.ymlの絶対パス" up -d http://localhost:3000 (サーバー)
http://localhost:8025 (mailpit)
http://localhost:8080/toLogin にアクセスできるか確認。
| 変数名 | 役割 | デフォルト値 |
|---|---|---|
| MAIL_HOST | mailpit のホスト名 | |
| MAIL_PORT | mailpit のポート番号 | 1025 |
| DB_USER | PostgreSQL のユーザ名 | postgres |
| DB_PASS | PostgreSQL のパスワード | postgres |
| DB_HOST | PostgreSQL のホスト名 | db |
| DB_PORT | PostgreSQL のポート番号 | 5432 |
| DB_NAME | PostgreSQL のデータベース名 | scraping |
(トップへ)
メールアドレスとパスワードで、SpringSecurityを使用したログイン認証を行います。
ログインが失敗した場合はエラーメッセージが表示されます。
メールアドレスは重複不可です。 不備がある場合はエラーメッセージが表示されます。
上部にURLを入力するテキストボックス、下部に登録した商品の一覧が表示されます。
Scrapeボタンを押すとボタンの表記が解析中に変わり、解析中の二重サブミットを防ぎます。
終了後は結果によって、テキストボックスの下に成功・失敗の文字が表示されます。
商品の削除やログアウトもこのページで行います。
(トップへ)
取得元のデータの構造により、解析ができない商品があります。他の商品を登録してください。
取得元のデータの変化により、最新価格の取得ができなくなる場合があります。削除して新しく登録し直してください。
また、商品情報を取得した直後から初回のバッチ処理までは全てデータなしと表示されます。
(トップへ)



