コピペでスクレイピング② クラウドワークスの新着情報を収集

# はじめに
前回の記事を踏まえてクラウドワークスの新着情報を収集するアプリを作ってみる
クラウドワークスのサーバーの負担にならないように、３分間隔くらいでスクレイピングします。

前回はページソースを取得するコードを書きました。
[コピペでスクレイピング① selenium でページソースを取得](https://qiita.com/Gen2423/items/cb46c712d0890cef1c98)

# スクレイピングツールの機能
どうせ作るならなにか実益のあるツールを作ってしまおうということで、
クラウドソーシャルサイトの「クラウドワークス」のサイトの新着情報を収集するツールを
作ってみます。

機能は以下の通り

・指定されたキーワード、今回は「スクレイピング」とし、スクレイピングに関係した新着情報がアレば検出する

・新着情報があればGmailで通知する

・実行ファイル（EXEファイル）にしてどのPCでも簡単使いやすくする

上記の仕様で作ってみたいとおもいます。

## 開発環境
Windows11pro
Python3.8

外部ライブラリー
Beautifulsoup4
lxml

※lxmlはhtmlで書かれたソースコードをBeautifulsoupが検索できるようにするパーサーです
※外部ライブラリーの導入は、コマンドプロンプトで 
```python
# bs4 はBeautifulsoupのパッケージ名です
pip install bs4
pip install lxml
```
と入力すればインストールされます

# ターゲットURLの作り方・ページソース取得
①[クラウドワークス](https://crowdworks.jp)トップページにアクセスし、赤枠内の「仕事を探す」をクリック
![2022-09-13_16h34_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1033228/bd0fbb83-7a8d-c142-4313-c403704db583.png)

②赤枠内の検索窓に「スクレイピング」と入力してEnterキーを押す
![2022-09-13_16h35_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1033228/cda87e77-7ab4-940b-5eca-b6d13d3c2079.png)

③ブラウザのURL表示をコピーします
![2022-09-13_16h35_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1033228/8a22cefc-0d30-4de4-5f80-96a663bc737a.png)

このままですと
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のエンコード・デコードサイト](https://tech-unlimited.com/urlencode.html)で変換してみます。
![2022-09-13_16h36_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1033228/b8ccceea-7724-652e-22e5-019e86d36145.png)
左にコピーしたURLをコピペして、デコードしてみましょう

結果は下記のようになりました
https://crowdworks.jp/public/jobs/search?keep_search_criteria=true&order=score&hide_expired=false&search[keywords]=スクレイピング
URLの一番最後の部分がキーワードになっています。
実は変換後の状態でもURLは使えます。リンクになっているのでクリックしてみてください。
きちんと開くはずです。


それでは、このURLを加工してターゲットURLを作ってみます。
```python:scray_data.py
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からウェブページを開き、取得したページはこのようになっています。![2022-09-13_18h17_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1033228/b521cb24-6141-4942-f9c7-9db453e17751.png)
今回は新着情報の確認とそのページへのURLさえ取得できれば良いので、該当するタグを探します。
ブラウザを開いたまま『F12』ボタンを押すとこのような画面が現れます。![2022-09-13_18h22_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1033228/61da3778-ed5f-864a-4209-a45845348fb8.png)
これは開いているWEBページのソースコードです。st.source_code(target_url)で全く同じものを取得しています。





次回は
[コピペでスクレイピング③ クラウドワークスの新着情報を収集](https://qiita.com/Gen2423/items/6ec4695549a707a44ec8)