実現したいこと
https://www.kaigokensaku.mhlw.go.jp/13/index.php?action_kouhyou_pref_sumai_search_list_list=true&PrefCd=13
上記ページのスクレイピングをしたい
発生している問題・分からないこと
https://www.kaigokensaku.mhlw.go.jp/13/index.php?action_kouhyou_pref_seikatu_search_list_list=true&PrefCd=13&SearchType=community
上記ページについては下記コードで問題なくスクレイピングできたのですが、
下記ページではスクレイピングができていない状態。
該当のソースコード
python
1import requests # requestsライブラリをインポート 2import pandas as pd # pandasライブラリをインポート 3import re # 正規表現ライブラリをインポート 4import json # JSONライブラリをインポート 5from bs4 import BeautifulSoup # BeautifulSoupクラスをインポート 6 7prefecture = 13 # 都道府県コードを定義 8 9max_value = 470 # 最大値を定義 10 11cookies = { # クッキー情報を定義 12 'PHPSESSID': 'a1b5d6c5ec67288931ff865bcdedc79b8936ad81f59475cbc1bd60bfc4f7acbb', 13 '_c_[13]': '3', 14 '_s_': '13-1371302322-00-023%2C13-1371303643-00-023%2C13-1370407023-00-023%2C13-1370403089-00-023%2C13-1370403006-00-023%2C13-1370403196-00-023%2C13-1371303460-00-023%2C13-1372207017-00-023%2C13-1370400184-00-023%2C13-1371300011-00-023', 15} 16 17headers = { # ヘッダー情報を定義 18 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 19 'Accept-Language': 'en-US,en;q=0.9,ja;q=0.8,es;q=0.7', 20 'Cache-Control': 'max-age=0', 21 'Connection': 'keep-alive', 22 'Content-Type': 'application/x-www-form-urlencoded', 23 'Origin': 'https://www.kaigokensaku.mhlw.go.jp', 24 'Referer': f'https://www.kaigokensaku.mhlw.go.jp/{prefecture}/index.php?action_kouhyou_pref_seikatu_search_list_list=true', 25 'Sec-Fetch-Dest': 'iframe', 26 'Sec-Fetch-Mode': 'navigate', 27 'Sec-Fetch-Site': 'same-origin', 28 'Upgrade-Insecure-Requests': '1', 29 'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36 Edg/116.0.1938.62', 30 'sec-ch-ua': '"Chromium";v="116", "Not)A;Brand";v="24", "Microsoft Edge";v="116"', 31 'sec-ch-ua-mobile': '?1', 32 'sec-ch-ua-platform': '"Android"', 33} 34 35params = { # パラメータを定義 36 'iframe': '1', # iframeパラメータを指定 37} 38 39output = [] # 出力リストを初期化 40initial = 0 # 初期値を定義 41for i in range(initial, max_value, 10): # ページネーションでループ 42 data = { # リクエストデータを定義 43 'PrefCd': prefecture, # 都道府県コードを指定 44 'OriPrefCd': prefecture, # オリジナル都道府県コードを指定 45 'SearchType': 'community', # 検索タイプを指定 46 'p_offset': str(i), # オフセットを指定 47 'p_sort': '0', # ソート方法を指定 48 'p_order': '0', # ソート順を指定 49 'method': 'result', # メソッドを指定 50 'PrefCd': prefecture, # 都道府県コードを指定 51 'action_kouhyou_pref_seikatu_search_list_list': 'true', # アクションを指定 52 } 53 54 response = requests.post( # POSTリクエストを送信 55 f'https://www.kaigokensaku.mhlw.go.jp/{prefecture}/index.php', # URLを指定 56 params=params, # パラメータを指定 57 cookies=cookies, # クッキー情報を指定 58 headers=headers, # ヘッダー情報を指定 59 data=data, # リクエストデータを指定 60 ) 61 62 soup = BeautifulSoup(response.text, 'html.parser') # BeautifulSoupオブジェクトを作成 63 64 script = soup.find_all("script")[17] # スクリプト要素を取得 65 matches = re.finditer(r'aryJigyosyo\.push\((\{[\s\S]*?\})\);', script.text) # 正規表現でマッチング 66 for match in matches: # マッチした要素についてループ 67 json_content = match.group(1) # JSONコンテンツを取得 68 print(json_content) # JSONコンテンツを出力 69 70 json_content = json_content.replace("'", '"') # シングルクォートをダブルクォートに置換 71 json_dict = json.loads(json_content) # JSON文字列をPython辞書に変換 72 output.append(json_dict) # 出力リストに追加 73 74df = pd.DataFrame(output) # DataFrameを作成 75df.to_csv('./hokatsu.csv', index=False) # CSVファイルに書き込み 76
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
下記を削除し、
'SearchType': 'community',
下記のように修正したが、
'action_kouhyou_pref_seikatu_search_list_list': 'true',
↓
'action_kouhyou_pref_sumai_search_list_list': 'true',
からのcsvが出力される
補足
特になし
回答1件
あなたの回答
tips
プレビュー