Skip to content

itachi-p/web-scraping

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

web-scraping

Python及びSelenium、Pillow、PandasによるWebスクレイピング初歩を少し体験する(極力最小コストで)

  • Pythonの基本文法その他の理解に拘らず、Webスクレイピングの大まかな流れを体験しておくに留める
  • BeautifulSoupその他PythonのフレームワークやAI、機械学習周りに中途半端に深入りしないよう要警戒
  • 時間を掛け過ぎないことが至上命題
    • 深く理解する、使いこなせるようになることが目的ではない

今回の学習内容(最小限に留め、学習範囲を拡げないこと)

  • Seleniumを用いた指定サイトへのアクセス
  • HTML要素からテキスト情報を抽出する
  • Seleniumを用いて自動ログインする
  • Pandasを用いてデータを整理し、CSVへ掃き出す
  • ランキング形式のサイトからまとめて情報を収集する
  • Pillowを用いてPythonで画像を扱う (2023/8/28追加)
  • 動物図鑑サイトからのテキスト情報及び画像収集プログラム作成
    • (8/26 AM4~6時の2時間程でほぼ作成済み)
    • 各動物種ごとのページURLのリスト及び画像をリサイズした上で保存
  • 上記のテキストデータをJSON形式で返すAPI作成
    • (仕様未確定)
      • 画像そのものを保存せず、画像もURLテキスト情報として返すか?
      • テキスト情報からJSONを生成して返すだけか、それともDBとも連携するか?
      • DBとも連携した上でJSONを返すならFlask等のフレームワークを使うか?
    • いちおう上記の予定で、Python&FlaskFastAPIを用いてAPIを作成する方向
      • ただし、FlaskFastAPIの学習は今回の目的ではないため、最小限の範囲で実装する

基本的に他の学習優先

  • Golang
  • TypeScript (& Next.js, React)
  • AWS認定ソリューションアーキテクト-アソシエイト(実際に資格取得するかは要検討)
    • AWS上で現在非公開(閉鎖)状態になっている独自ドメインの再公開とポートフォリオ公開
  • WebDeveloperBootcamp2023 (※非常に長大な教材の為、上記と並行して毎日少しづつ消化)
    • HTML, CSS, JavaScript、SQL、ネットワークの基礎の復習(これだけでも相当な時間を要す見込み)
      • SQL、NoSQL、MongoDB、Mongoose
      • 認証基盤の実装・認可、クッキー・セッション
      • セキュリティ(XXS、SQLインジェクション等)
      • Webアプリのデプロイ
      • クラウドサービスのデータベース(恐らくAWSソリューションアーキテクト-アソシエイトと一部被る内容)
      • 画像アップロード
      • 地図とジオコーディング

今回の内容を活かせそうなアイデアメモ

複数の技術を組み合わせたポートフォリオサイト作成案

  1. インターネット上からテキストや画像を収集し、
  2. それらをJSONの形で返すだけのAPIまではPythonで作成する
      Python、Pandas:panda:、Selenium(| BeautifulSoup) &FlaskFastAPI
  3. 2.で作成したAPIを用いて、取得したJSONから画像を含むページを生成する
    • TypeScript
    • Next.js, React
    • Vercel
    • DatabaseはSupabaseを使用?或いはMongoDB?AWS?要検討
    • CSSはBootstrapではなく、極力TailwindCSSを使用する
      • が、Tailwindに学習コストを割かないこと(最長で2時間程度に収める)
    • ログイン機能には凝らない(今や自分でログイン機能を作り込む必要性はほぼない?)
    • pagenationを実装する
    • 見た目(フロントエンド、デザイン領域)にあまりこだわり過ぎない
    • 見た目よりロジック、変数名やコメントの付け方、Gitのコミット単位やメッセージの書き方に拘る
    • コメントは基本的にコードを見ればわかることは書かない Why、目的を書く
    • 英語での記述にこだわって翻訳に悩むより日本語で簡潔に書く

2.のAPIの例 PythonとSelenium(| BeautifulSoup)を用い、ResponseとしてJSONを吐く

  • JSONを返すAPIまで作成するならFlaskかFastAPIを使うか?
    • またはWAFを使わずにPythonの標準ライブラリ、Jupyter Notebookのみで実装?
    • 或いは取得データを整形して普通にJavaScriptだけでJSON化するのが結局一番早い
  • 著作権や垢VAN等のトラブル発生可能性をあまり気にしない場合
    • 例えば、Amazonの商品検索結果をCSVで返すAPIを作成する
    • 近隣のスパイスカレー屋のメニュー写真を画像で返すAPIを作成する
  • 画像使用権等のトラブルを避ける場合
    • 自分で撮影した動物orカレーの写真をアップし、その画像群のURLを含むJSONを返すAPIを作成する

2.のアプリケーションの例

  • TypeScriptとNext.js, Reactを用い、1.のAPIから取得したJSONを元にページを生成する
    • 上記をVercelでデプロイする
    • あるいはHerokuでデプロイする(有料化したけど)
  • 或いはGolang+Gin+Gorm等を用いて同様のREST APIを実装する
    • 上記をAWS、またはGoogle系でまとめてGCP(GAEかGCEのどちらか要検討)デプロイする
      • そもそもGin, Echo等のフレームワークやGorm, sqlboiler等のORMを使う必要性があるか?
      • 多くのことがライブラリでまかなえるため、基本はWAFやORMを使わないのが「Goらしい手法」?
        • 特にフレームワークの使用についてはGo標準パッケージのnet/httpで十分かもしれない
        • →基本不使用の方向で
      • ORM(Ruby on RailsのActiveRecordのようなもの)を使うメリットとデメリットを検討する
        • そもそも暫くSQLを触っておらず忘れかけてるので、文法やスキーマ設計から復習する必要がある
        • 一方、ORMを使うことでSQLを意識せずに済むため、むしろ当面は積極的にORMを使うべきか?
        • ORMを使うことで、SQLインジェクション等のセキュリティリスクを回避できるメリットもある
        • どのみち一度どこかのタイミングでSQLの復習やデータベース構築(設計)の学習は必要と思われる
          • もしかすると今後SQL構文を手書きする必要性・機会じたいが薄れるかも

注意点

  • Chromeのバージョンと合わせてChromeDriverをダウンロードする必要がある(Windowsだけ?)
  • Selenium Ver4.0以降は、find_element_by_id('username')等のメソッドが使えなくなった
    • 代わりにfind_element(BY.ID, 'username')等のメソッドを使う

About

Python及びSelenium, Pandas, PillowによるWebスクレイピング初歩

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published