クラウドワークスから自分の条件に合った案件をスクレイピングする①

スクレイピン

URLから検索すれば問題ないのですが、勉強がてらスクレイピングしてみました。システム開発案件のうちpythonに関する案件を抽出してみます。

 環境

python3.7
Eclipse2019-06 (4.12)

 前提条件

  • selenium を使用します

 お課

 python開発案件の情報取得スクレイピング&データ保存


クラウドソーシングサイトにおける、システム開発案件のうちpythonを使用した案件のみを抽出してCSVファイルに保存。取得対象カラムは「取得日時」「案件名」「案件URL」「金額」の4種類。

 元URL

トップページではなく、既に存在するこちらのシステム開発案件の場所からにします

https://crowdworks.jp/public/jobs/group/development

 実際のコード

coding:utf-8
 import csv
 import time #timeモジュールを呼び出します
 import mysql.connector #mySQLに接続します
 import requests, bs4 #requestsとは、httpの通信を行うことができるライブライ。ネットワーク処理をできるライブラリ
 from urllib.parse import urlparse, urljoin
 from bs4 import BeautifulSoup #HTML構文を解析する為のパッケージ
 from datetime import datetime
 from selenium import webdriver
 from urllib.request import(
     urlopen,
     Request,
 )#urllibとは・・・インターネットにアクセスすることが出来るパッケージ
 requestsモジュールとは・・・http通信ライブラリで、webサイトの情報取得や画像の収集を簡単に行うことが出来る。
 def crowdworks(): #クラウドワークスのシステム開発案件URLの取得
     res = requests.get('https://crowdworks.jp/public/jobs/group/development')
     res.raise_for_status()
     soup = bs4.BeautifulSoup(res.text, "html.parser")
     # print(soup) #htmlのコード全て表示できる
     driver = webdriver.Chrome(executable_path='XXXXXXXXXXXXXXXXXXXXXXXXXX') #絶対パスを入れます
     driver.get("https://crowdworks.jp/public/jobs/group/development")
     time.sleep(1)
     search_box=driver.find_element_by_name("search[keywords]") #検索ボックスを探します search[keywords]は検証時のnameの要素より。
     search_box.send_keys("python") #検索ボックスに左記を入れます
     search_box.submit() #検索ポスト(submit)の実行
     time.sleep(5)
     soup = bs4.BeautifulSoup(driver.page_source,"html.parser") #bs4を使ってこのページソースの文字列を再解析してみます。
     driver.quit() #ブラウザを閉じる
     while True: #永久に実行させます
         if datetime.now().second == 1: #○時△分1秒以外の時には、作動し続ける
             continue
         with open("crowdworks.csv", mode="a", encoding="utf-16") as f:
             current_time = datetime.now().strftime("%Y/%m/%d %H:%M:%S") #現在の時刻を年、月、日、時、秒で取得
             writer = csv.writer(f, dialect="excel-tab", delimiter="\t") #エクセルのたぶ区切り
             data_array = [] #整列させる
             search_results = soup.find_all("div", attrs={"class": "search_results"})
             for job_data in search_results:
                 # print(job_data)
                 # 各案件を抽出
                 for item in job_data.find_all('li', attrs={"data-jobs-list-item": True}):
                     # タイトルの抽出
                     item_title = item.find("h3", attrs={"class": "item_title"})
                     # 金額の抽出
                     payment = item.find("div", attrs={"class": "entry_data payment"})
                     # URLの抽出(<a data-item-title-linkのタグのhrefの値を取得する )
                     rel_url = item.find("a", attrs={"data-item-title-link": True}).get("href")
                     # print(rel_url)
                     # URLの合成
                     abs_url = urljoin(res.url, rel_url)
                     # 1行に出力するデータを用意
                     data_array.append(current_time)
                     data_array.append(item_title.text.strip())
                     data_array.append(payment.text.strip())
                     data_array.append(abs_url)
                     # 1行分のデータをCSVに書き出し
                     writer.writerow(data_array)
                     # 1行分データをクリア
                     data_array = []
             print(current_time) #時間の表示
             f.close() #ファイル破損防止の為に閉じる
 if name=="main":
     crowdworks()

 実行結果

 まとめ

後は実行結果を、GoogleAPIと連動させて自動的にメールを送ってくるようにしたり、組み合わせられれば随分と楽になりそうです。to be continue…

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です