統計局は下記のページで労働力調査に関するレポートを毎月掲載しています。
この記事では統計局の労働力調査レポートを全て取得するpythonコードを記載します。
1. ステップ1: メインページの内容を取得
まず、対象とするメインページの内容を取得し、BeautifulSoupを使ってHTMLを解析します。このステップでは、全ての月ごとのリンクを取得します。
import requests
from bs4 import BeautifulSoup
# メインページのURL
main_url = 'https://www.e-stat.go.jp/stat-search/files?page=1&layout=datalist&toukei=00200531&tstat=000000110001&cycle=1&tclass1=000001040276&tclass2=000001040277&tclass3val=0'
# ページの内容を取得
response = requests.get(main_url)
response.raise_for_status()
# BeautifulSoupでHTMLを解析
soup = BeautifulSoup(response.content, 'lxml')
# 各月へのリンクを取得
month_links = soup.select('ul.stat-cycle_ul_other a.stat-item_child')
requests.get() でメインページのHTMLを取得します。
response.raise_for_status() を使って、リクエストが正常に行われたかを確認します。
BeautifulSoup を使用してHTMLを解析し、各月へのリンクを取得するために soup.select() を利用します。
ステップ2: PDFリンクと公開日を取得
次に、各月のページに移動し、そこからPDFリンクと公開日を取得します。
# ベースURL
base_url = 'https://www.e-stat.go.jp'
# 各月のページに移動してPDFリンクと公開日を取得
for link in month_links:
month_url = base_url + link['href']
month_response = requests.get(month_url)
month_response.raise_for_status()
# 月ごとのページを解析
month_soup = BeautifulSoup(month_response.content, 'lxml')
# 公開日を探す
publish_date_tag = month_soup.find('span', class_='stat-sp', text='公開(更新)日 ')
if publish_date_tag:
publish_date = publish_date_tag.find_next_sibling(text=True).strip()
else:
publish_date = "公開日が見つかりませんでした"
# PDFリンクを探す
pdf_link_tag = month_soup.find('a', class_='stat-dl_icon stat-icon_2 stat-icon_format js-dl stat-download_icon_left')
if pdf_link_tag:
pdf_url = base_url + pdf_link_tag['href']
print(f"公開日: {publish_date}, PDF URL: {pdf_url}")
else:
print(f"公開日: {publish_date}, No PDF found")
各月のページにアクセスし、そのページを解析します。
find() メソッドを使って、公開日が書かれたタグを探します。
公開日のタグが見つかった場合、 find_next_sibling() を使用して、公開日の日付部分を取得します。
PDFリンクも同様に find() メソッドで探し、リンクが存在する場合は完全なURLを構築して取得します。
コード全体
import requests
from bs4 import BeautifulSoup
# メインページのURL
main_url = 'https://www.e-stat.go.jp/stat-search/files?page=1&layout=datalist&toukei=00200531&tstat=000000110001&cycle=1&tclass1=000001040276&tclass2=000001040277&tclass3val=0'
# ページの内容を取得
response = requests.get(main_url)
response.raise_for_status()
# BeautifulSoupでHTMLを解析
soup = BeautifulSoup(response.content, 'lxml')
# 各月へのリンクを取得
month_links = soup.select('ul.stat-cycle_ul_other a.stat-item_child')
# ベースURL
base_url = 'https://www.e-stat.go.jp'
# 各月のページに移動してPDFリンクと公開日を取得
for link in month_links:
month_url = base_url + link['href']
month_response = requests.get(month_url)
month_response.raise_for_status()
# 月ごとのページを解析
month_soup = BeautifulSoup(month_response.content, 'lxml')
# 公開日を探す
publish_date_tag = month_soup.find('span', class_='stat-sp', text='公開(更新)日 ')
if publish_date_tag:
publish_date = publish_date_tag.find_next_sibling(text=True).strip()
else:
publish_date = "公開日が見つかりませんでした"
# PDFリンクを探す
pdf_link_tag = month_soup.find('a', class_='stat-dl_icon stat-icon_2 stat-icon_format js-dl stat-download_icon_left')
if pdf_link_tag:
pdf_url = base_url + pdf_link_tag['href']
print(f"公開日: {publish_date}, PDF URL: {pdf_url}")
else:
print(f"公開日: {publish_date}, No PDF found")