URLから検索すれば問題ないのですが、勉強がてらスクレイピングしてみました。システム開発案件のうちpythonに関する案件を抽出してみます。
コンテンツ
環境
python | 3.7 |
Eclipse | 2019-06 (4.12) |
前提条件
- selenium を使用します
お課
python開発案件の情報取得スクレイピング&データ保存
クラウドソーシングサイトにおける、システム開発案件のうちpythonを使用した案件のみを抽出してCSVファイルに保存。取得対象カラムは「取得日時」「案件名」「案件URL」「金額」の4種類。
元URL
トップページではなく、既に存在するこちらのシステム開発案件の場所からにします
https://crowdworks.jp/public/jobs/group/development
実際のコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
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 <strong>name</strong>=="<strong>main</strong>": crowdworks() |
実行結果
まとめ
後は実行結果を、GoogleAPIと連動させて自動的にメールを送ってくるようにしたり、組み合わせられれば随分と楽になりそうです。to be continue…
コメントを残す