統計局から労働力調査レポート一覧を取得する

統計局は下記のページで労働力調査に関するレポートを毎月掲載しています。
この記事では統計局の労働力調査レポートを全て取得するpythonコードを記載します。

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


### 1. ステップ1: メインページの内容を取得
まず、対象とするメインページの内容を取得し、BeautifulSoupを使ってHTMLを解析します。このステップでは、全ての月ごとのリンクを取得します。
```python
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リンクと公開日を取得します。
```python
# ベース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")

```