ちょっと、そこ! Indeed から求人情報を収集したいですか?正しい場所に来ましたね。
Indeed はウェブ上で最大の求人検索エンジンの 1 つであり、 1億1000万人 毎月のユニーク訪問者数。それは、求人情報、給与、会社概要などに関する膨大なデータの宝庫です。
残念ながら、Indeed の API はこれらすべてのデータを完全には公開していません。そこで登場するのがWebスクレイピングです。
このガイドでは、Python を使用して Indeed をスクレイピングする方法を段階的に説明します。使用できるコード スニペットと、正確にスクレイピングしてブロックを回避するためのヒントを共有します。
また、スクレイピングを自動化して毎日、毎週、または毎月実行する方法についても説明します。そうすることで、求人情報データを自動的に最新の状態に保つことができます。
最後には、プロのように Indeed の求人情報をスクレイピングできるようになります。掘り下げてみましょう!
Indeed の求人情報をスクレイピングする理由
Python コードに実際に取り組む前に、次のことについて話しましょう。 なぜ まず、Indeed からデータをスクレイピングすることをお勧めします。
以下にいくつかのアイデアを示します。
市場調査 – 求人の傾向を分析して、需要が高まっているスキルや役割を特定します。 Indeed には次のようなデータがあります 何百万 あらゆる業界の求人数。
競争力のあるインテリジェンス – 企業が同様の役割に対してどのような給与と福利厚生を提供しているかを確認します。独自の報酬パッケージをベンチマークする場合に役立ちます。
求人検索エンジン – 特定のキーワードまたは場所にフィルターされた Indeed データを使用して、カスタム求人掲示板を構築します。
採用ツール – 候補者のスキルに一致する新規求人を追跡し、関連する仕事を明らかにします。
分析を再開する – 職務記述書からキーワードとスキルを抽出し、履歴書とカバーレターを改善するための提案を提供します。
これらはほんの一例にすぎません。求人情報に関する豊富な構造化データを使用すると、可能性は無限大です。
では、Web スクレイピングを使用して実際にそのデータを抽出する方法を見てみましょう。
確かにスクレイピングは合法ですか?
コーディングに入る前に、Web スクレイピングの合法性について簡単に触れたいと思います。ここで懸念を抱いている人もいると思います。
簡単に言うと、Indeed から公開データをスクレイピングするのは次のとおりです。 完全に合法 ほとんどの場合、いくつかの基本的なルールに従っている限り、問題はありません。
公開ページのみにアクセスしてください。プライベート ユーザー データやログインを収集しようとしないでください。
あまりにも積極的にスクレイピングして、Indeed のサーバーに過負荷をかけないでください。礼儀正しいクロールの練習に従ってください。
Indeed の利用規約を遵守してください。 Webスクレイピングを特に禁止しているわけではありません。
著作権を尊重するため、テキストの大規模な抜粋をそのままコピーすることは避けてください。言い換えはOKです。
スクレイピングされたプライベート、個人、機密データを再公開しないでください。
これらの常識的なガイドラインに従えば、Indeed を Web スクレイピングして公開求人データを取得することは、ほとんどの国で法的に許可されています。
もちろん、法律はさまざまであるため、懸念がある場合は弁護士に相談することをお勧めします。ただし、倫理を遵守している限り、自信を持って Indeed をスクレイピングできます。
さて、楽しいこと、実際のコードに飛び込みましょう!
Python を使用した Indeed リスティングのスクレイピング
Indeed のような大規模なサイトをスクレイピングする場合、次のようなライブラリのおかげで Python は優れた選択肢となります。 つながり申請, 美しいスープ & Selenium .
次のことを行うためのスクリプトについて説明します。
キーワードと所在地の検索に一致する求人情報を抽出します
役職、給与、説明などの詳細を解析する
ページネーションを自動化して、複数のページにわたるすべてのリストを取得します
始めましょう!
ライブラリのインポート
使用します つながり申請 ページを取得するには、 美しいスープ 解析のために、 Time スロットルする、そして パンダ データを保存するには:
import requests
from bs4 import BeautifulSoup
import time
import pandas as pd
リクエストとBeautifulSoupはあなただけです 本当に 必要。ただし、Pandas はデータの管理に役立ちますが、Time はリクエストを抑制します。
検索パラメータの定義
まず、希望する求人情報を定義しましょう。キーワード、場所、その他のフィルターを指定します。
keywords = "Remote Software Engineer"
location = "United States"
salary_min = 100000
これは、米国内のリモートで高収入のソフトウェア関連の仕事をターゲットにしています。希望の基準に合わせて調整します。
検索結果ページの取得
パラメータを設定したら、キーワードと場所を渡して URL をリクエストします。
BASE_URL = "https://www.indeed.com/jobs?"
params = {
‘q‘: keywords,
‘l‘: location,
‘minSalary‘: salary_min,
‘remotejob‘: ‘remote‘ # Filter remote jobs
}
print(f‘Fetching job listings for {keywords} in {location}...‘)
res = requests.get(BASE_URL, params=params)
res.raise_for_status() # Raise exception for 4xx/5xx
これにより、最初の検索クエリが実行され、キーワードとパラメータでフィルタリングされます。
BeautifulSoup で結果を解析する
次に、検索結果ページの HTML を解析して、高レベルのリスト データを抽出します。
soup = BeautifulSoup(res.text, ‘html.parser‘)
listings = [] # List to store listings
for div in soup.find_all(‘div‘, class_=‘job_seen_beacon‘):
title = div.find(‘h2‘).text.strip()
company = div.find(‘span‘, class_=‘companyName‘).text.strip()
location = div.find(‘div‘, class_=‘companyLocation‘).text.strip()
# Append listing data
listings.append({
‘title‘: title,
‘company‘: company,
‘location‘: location
})
ここで各リストを見つけます div
、タイトルや会社などの主要なフィールドを取得し、 listings
リスト。
ページネーションのハンドル
Indeed は結果を複数のページに分割します。それぞれを繰り返す必要があります。
# Track page number
current_page = 0
while True:
# Increment page
current_page += 1
print(f‘Scraping page {current_page}...‘)
# Build URL for next page
next_page_url = BASE_URL + f‘&start={current_page*10}‘
# Fetch page HTML
res = requests.get(next_page_url, params=params)
# Parse HTML
soup = BeautifulSoup(res.text, ‘html.parser‘)
# Return if last page
if not soup.find(‘a‘, {‘aria-label‘: ‘Next‘}):
print(‘Reached last page!‘)
break
# Extract listings
for div in soup.find_all(...):
# Extract listing data
# Sleep to throttle requests
time.sleep(3)
print(f‘Scraped {len(listings)} listings‘)
ここでは、ページ番号を継続的にインクリメントし、次のページをフェッチし、リストを抽出し、最後のページに到達するまでループします。
短編を追加する time.sleep()
スロットルは、Indeed のサーバーに負荷がかかるのを避けるのに役立ちます。
スクレイピングリストの詳細
これまでのところ、タイトルや会社などの高レベルのデータを抽出しました。給与や説明などの詳細を取得するには、各リストの URL をスクレイピングします。
from selenium import webdriver
driver = webdriver.Chrome()
# Loop through listings
for listing in listings:
print(f‘Getting details for {listing["title"]}‘)
# Load listing URL
url = listing[‘url‘]
driver.get(url)
# Extract key fields
desc = driver.find_element_by_id(‘jobDescriptionText‘).text
salary = driver.find_element_by_class_name(‘salary-snippet‘).text
listing[‘desc‘] = desc
listing[‘salary‘] = salary
# Sleep to throttle
time.sleep(2)
driver.quit()
ここで、Selenium は、JavaScript を多用するページをレンダリングするためのフル ブラウザを提供します。各 URL をロードし、説明や給与などの追加フィールドを抽出します。
Proのヒント: を使用することを検討してください プロキシサービス Selenium を大規模に使用するときに IP ブロックを回避するため。
以上です!これらの手順を実行すると、Indeed から何千もの求人情報を自動的に収集できます。
最終的に得られるのは、分析したり Excel などのツールにエクスポートできる構造化されたジョブ データです。次にいくつかの例を見てみましょう。
スクレイピングされた Indeed データで何ができるのでしょうか?
Indeed のリスティングをスクレイピングできるようになったので、実際にそのデータで何ができるのでしょうか?
以下にいくつかのアイデアを示します。
分析のために Excel にエクスポート
df = pandas.DataFrame(listings)
df.to_excel(‘indeed_listings.xlsx‘, index=False)
Pandas を使用すると、結果を Excel に簡単にエクスポートできます。これにより、強力なフィルタリング、ピボット テーブル、数式が可能になります。
場所、給与、スキルなどの傾向を分析できます。
求職データベースの構築
import sqlite3
# Connect to SQLite database
conn = sqlite3.connect(‘jobs.db‘)
# Create table
conn.execute(‘‘‘
CREATE TABLE jobs (
title TEXT,
company TEXT,
description TEXT,
salary REAL
);
‘‘‘)
# Insert listings into database
for listing in listings:
conn.execute("""
INSERT INTO jobs VALUES (
?, ?, ?, ?
)""", (listing[‘title‘], listing[‘company‘],
listing[‘desc‘], listing[‘salary‘]))
conn.commit()
conn.close()
SQLite は、カスタマイズされた検索用のリストを保存するためのシンプルなデータベースを提供します。 Flask と統合して独自の求人掲示板を構築しましょう!
関連するリストを候補者に電子メールで送信する
import smtplib
from email.message import EmailMessage
# Connect to SMTP server
smtp = smtplib.SMTP(‘smtp.domain.com‘)
for listing in listings:
# Check if listing matches candidate skills
if match:
msg = EmailMessage()
msg[‘Subject‘] = f‘New job for you - {listing["title"]}‘
msg[‘From‘] = ‘[email protected]‘
msg[‘To‘] = ‘[email protected]‘
msg.set_content(listing[‘desc‘])
# Send listing to candidate
smtp.send_message(msg)
smtp.quit()
Python を使用すると、候補者のスキルや興味に合った新しいリストを自動的に電子メールで送信することが簡単になります。
これはほんの一部のサンプルにすぎません。何百万件ものリストのデータがあれば、可能性は無限大です。
次に、このスクレイパーを自動的に実行する方法を見てみましょう。
毎日の Indeed スクレイピングのスケジュール設定
Indeed をリアルタイムでスクレイピングすることは便利ですが、さらに価値があるのはセットアップです。 自動化されたスケジュールされたスクレイピング データを最新の状態に保つため。
固定の定期的なスケジュールでスクレイパーを実行するための 2 つの優れたオプションを次に示します。
cronジョブ
Python スクリプトを自動化する簡単な方法は、標準の Linux ユーティリティである cron です。
毎日午前 8 時に実行するには、次のようなエントリを追加します。
0 8 * * * python /home/user/indeedScraper.py
複雑な繰り返しをスケジュールできます。しかし、cron にはスクレイピングが失敗した場合のレポートがありません。
スクレイピングプラットフォーム
より堅牢なスケジューリングと自動化のために、次のような専用のスクレイピング プラットフォームを使用することをお勧めします。 スクラップ or アピファイ.
これらは、CAPTCHA、ブロック、JavaScript を処理するためのブラウザーとプロキシの自動化を提供します。また、簡単な cron ジョブ スケジューリングが組み込まれています。
また、電子メールアラート、パフォーマンス分析、統合オプションも利用できます。彼らは本当に自動化に伴う頭痛の種を取り除きます。
簡単な比較は次のとおりです。
cronジョブ | スクレイピングプラットフォーム | |
---|---|---|
価格(英語) | 無料版 | 有料プラン |
プロキシとヘッドレスブラウザ | カスタムコードが必要 | 含まれる機能 |
スケジューラ | 基本的な繰り返し | 詳細オプション |
監視とアラート | なし | メールとダッシュボード |
結果のストレージ | 手動操作 | 内蔵ストレージとエクスポート |
Indeed のような大規模で複雑なサイトの場合は、専用のプラットフォームを使用することをお勧めします。大規模なスクレイピングでは、追加の信頼性と機能はコストに見合う価値があります。
要約しましょう
このガイドでは次のことを学びました:
なぜ スクレイピング Indeed は、市場調査、求人検索、採用ツールとして役立ちます。
リストの抽出 Python の検索クエリを模倣することによって。
ベストプラクティス リクエストをスロットルしたり、プロキシを使用してブロックを回避したりするなどです。
詳細を解析する 給与やリストページの説明など。
自動化オプション データを最新の状態に保つための cron や専用のスクレイピング プラットフォームなど。
上記のコード サンプルは、独自の Indeed データのスクレイピングを開始するためのテンプレートを提供します。ユースケースに合わせて自由に調整して構築してください。
Indeed の利用規約を尊重し、過度に積極的なスクレイピングを避け、適切な Web スクレイピングの衛生管理に従って法律を遵守することを忘れないでください。
このガイドが、Python を使用して Indeed を効果的にスクレイピングする方法の包括的な概要を理解できたことを願っています。これらの手順を自動化すると、Indeed の膨大な求人情報データを活用できるようになります。
他にご質問がございましたら、お知らせください。 Web スクレイピングのベスト プラクティスについて、いつでも喜んでお話しします。
Indeed スクレイピング プロジェクトの成功を祈ります。