前提・実現したいこと
厚生労働省の介護事業所・生活関連情報検索から事業所のリストを取得したいと思っています。
このサイトは次ページへのリンクでhref=javascript:void(0)を使用している為、次ページに行く際にURLが変更されずにスクレイピングの仕方が分かりません。
全く同じ様なteratailの質問をここで見つけたのですが、requestで取得したページが欲しいものとは別で上手くいきませんでした。(URLはhttp://www.kaigokensaku.mhlw.go.jp/13/index.php?action_kouhyou_pref_search_list_list=trueに変えて行いました)
この様に画面遷移が無効になっていてdata-offsetを使って見た目を更新しているサイトのスクレイピングの仕方をどうか教えて頂けないでしょうか?
よろしくお願い致します。
発生している問題・エラーメッセージ
また、検証モード->ネットワークで次ページをクリックした際の詳細URLをChromeに直接打ち込んで飛んでみましたが、以下の様な画面が表示されてしまいます。
該当のソースコード
python3
1from selenium import webdriver 2from selenium.webdriver.chrome.options import Options 3from google.colab import files 4from bs4 import BeautifulSoup 5import time 6import requests 7import pandas as pd 8 9 10columns = ["Name"] 11df = pd.DataFrame(columns=columns) 12 13search_url = "http://www.kaigokensaku.mhlw.go.jp/13/index.php?action_kouhyou_pref_list_result=true&method=pager&p_count=5&p_offset=0&p_sort_name=FreeNumUpdateDate&p_order=1" 14 15options = webdriver.ChromeOptions() 16options.add_argument('--headless') 17options.add_argument('--no-sandbox') 18options.add_argument('--disable-dev-shm-usage') 19driver = webdriver.Chrome('chromedriver',options=options) 20driver.get(search_url) 21time.sleep(10) 22html = driver.page_source.encode('utf-8') 23soup = BeautifulSoup(html, "html.parser") 24print(soup.prettify()) 25 26# # ここから下は普通にスクレイピングを行なっていく。 27 28sections = soup.find_all("li", {"class": "listItem"}) 29 30for section in sections: 31 name = section.find("a", {"class" : "noLink"}).get_text() 32 if (name != ''): 33 se = pd.Series([name], columns) 34 df = df.append(se, columns) 35 36df
result
1 2<html> 3 <head> 4 </head> 5 <body> 6 </body> 7</html> 8 9Name 10
試したこと
- requestを使ってみる
空の画面が表示されてしまいました。
- 普通にSeleniumを使ってみる(このサイトがJSでデータを反映させている為)
最初のページはスクレイピング出来るのですが、2ページ目以降がページ遷移の仕方が分からずに出来ませんでした。
- この質問の回答をカスタマイズしつつ試しみてる
空の画面が表示されてしまいました。
- 検証->ネットワークから得た次ページのURLの詳細を使ってスクレイピングをしてみる
上記のエラーに添付した画像の様な物が表示されてしまいました。
補足情報(FW/ツールのバージョンなど)
上記コードはGoogle Colabを使って動かしています。
回答2件
あなたの回答
tips
プレビュー