はじめに
前回の記事を踏まえてクラウドワークスの新着情報を収集するアプリを作ってみる
クラウドワークスのサーバーの負担にならないように、3分間隔くらいでスクレイピングします。
前回はページソースを取得するコードを書きました。
コピペでスクレイピング① selenium でページソースを取得
スクレイピングツールの機能
どうせ作るならなにか実益のあるツールを作ってしまおうということで、
クラウドソーシャルサイトの「クラウドワークス」のサイトの新着情報を収集するツールを
作ってみます。
機能は以下の通り
・指定されたキーワード、今回は「スクレイピング」とし、スクレイピングに関係した新着情報がアレば検出する
・新着情報があればGmailで通知する
・実行ファイル(EXEファイル)にしてどのPCでも簡単使いやすくする
上記の仕様で作ってみたいとおもいます。
開発環境
Windows11pro
Python3.8
外部ライブラリー
Beautifulsoup4
lxml
※lxmlはhtmlで書かれたソースコードをBeautifulsoupが検索できるようにするパーサーです
※外部ライブラリーの導入は、コマンドプロンプトで
# bs4 はBeautifulsoupのパッケージ名です
pip install bs4
pip install lxml
と入力すればインストールされます
ターゲットURLの作り方・ページソース取得
①クラウドワークストップページにアクセスし、赤枠内の「仕事を探す」をクリック
②赤枠内の検索窓に「スクレイピング」と入力してEnterキーを押す
このままですと
https://crowdworks.jp/public/jobs/search?keep_search_criteria=true&order=score&hide_expired=false&search%5Bkeywords%5D=%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0
などと表示されています。このまま使用することも可能ですがひと工夫
URLのエンコード・デコードサイトで変換してみます。
左にコピーしたURLをコピペして、デコードしてみましょう
結果は下記のようになりました
https://crowdworks.jp/public/jobs/search?keep_search_criteria=true&order=score&hide_expired=false&search[keywords]=スクレイピング
URLの一番最後の部分がキーワードになっています。
実は変換後の状態でもURLは使えます。リンクになっているのでクリックしてみてください。
きちんと開くはずです。
それでは、このURLを加工してターゲットURLを作ってみます。
from bs4 import BeautifulSoup
import lxml
import selenium_tool as st
import os
import shutil
# ==================================================================================
main_url = 'https://www.crowdworks.jp'
keyword = "スクレイピング"
target_url = f"https://crowdworks.jp/public/jobs/search?\
keep_search_criteria=true&order=score&hide_expired=false&search[keywords]={keyword}"
# ページソース取得
res = st.source_code_get(target_url)
soup = BeautifulSoup(res, "lxml")
補足説明
import selenium_tool as st は前回作ったページソースを取得するファイルです。
それを今回呼び出し、関数として利用しています。
main_url = 'https://www.crowdworks.jp' は後ほど利用します
さて、
keyword = "スクレイピング"
target_url = target_url = f"https://crowdworks.jp/public/jobs/search?keep_search_criteria=true&order=score&hide_expired=false&search[keywords]={keyword}"
の{keyword}部分に”スクレイピング”キーワードを代入するとURLが出来上がるので、その処理です。
そのURLを前回作ってimportしたst.source_code_get()の引数として入れ、resでWEBページのソースコードを取得しています。resをBeautifulsoupでパースして要素をこれから取り出します。
lxmlの部分の他にthml_parcerというPython標準のパーサーもありますが、lxmlが高速であるため、今回はそちらを利用しました。
Beautifulsoupで要素を抽出
target_urlからウェブページを開き、取得したページはこのようになっています。
今回は新着情報の確認とそのページへのURLさえ取得できれば良いので、該当するタグを探します。
ブラウザを開いたまま『F12』ボタンを押すとこのような画面が現れます。
これは開いているWEBページのソースコードです。st.source_code(target_url)で全く同じものを取得しています。