質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

Q&A

解決済

3回答

16893閲覧

python、ページ遷移時にurlが変わらないwebページのスクレイピング href = javascript:void(0);となっている場合

tatpka

総合スコア17

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

0グッド

1クリップ

投稿2018/12/14 11:02

編集2018/12/14 11:03

前提・実現したいこと

厚生労働省の介護サービス情報公表システムを使って,介護事業所の情報を条件を設定してスクレイピングしたいと考えています。しかしながら、条件を設定して検索しても、urlが変わらないため、スクレイピングができずに困っています。(http://www.kaigokensaku.mhlw.go.jp/27/index.php?action_kouhyou_pref_search_list_list=true&PrefCd=27)
次のページを示すところの要素を見ると、href = javascript:void(0); となっており、ページを帰ることができません。
どのようにすればページを切り替えることができるのでしょうか。
似たような質問(https://teratail.com/questions/128962)をみて、今回はjavascriptで覆われているためどう解明すればいいのかわかりません。

また、こちらの事業所検索ページ(http://www.kaigokensaku.mhlw.go.jp/27/index.php?action_kouhyou_pref_search_keyword_search=true) で条件を入力して、絞り込んで検索したページをスクレイピングということは可能でしょうか。

何とぞよろしくお願いいたします。

該当のソースコード

import requests import lxml.htmnl r = requests.get("http://www.kaigokensaku.mhlw.go.jp/27/index.php?action_kouhyou_pref_search_list_list=true&PrefCd=27") root = r.lxml.html.fromstring(html) next = root.xpath("//*[@id="pagerTop"]/ul/li[3]/a") URL = next[0].attrib("href")

みたいなことをやってみましたが、結局飛んだ先もURLが変わらないため、同じページをrequestsしてしまいます。

試したこと

補足情報(FW/ツールのバージョンなど)

python3でやっています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

イメージ説明

  1. Chromeで右クリックのメニューの検証をクリック
  2. Network
  3. ページ送りの2をクリックするとページが読み込まれる
  4. Nameの一番上のHeadersの中のFormDataを見ればいいです。

投稿2018/12/18 08:29

barobaro

総合スコア1286

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatpka

2018/12/19 04:41

わかりやすく説明していただき大変ありがとうございました! このDataFormの中に、addressという要素がありそこに住所リストから住所を自動入力させることができないかなと思っています。https://teratail.com/questions/164789?modal=q-comp 新しく質問を作ったので、ご教授いただくことはできないでしょうか!よろしくお願いいたします。
guest

0

ベストアンサー

流れとしては

ページ2ボタンを確認

html

1<a href="javascript:void(0);" onclick="pagerForm(5,5,null,null); return false;">2</a>

「pagerForm」を検索

javascript

1//ページャー関数 2function pagerForm(offset, count, sort, order) { 3 var f = document.ResultListForm; 4 f.p_offset.value = offset; 5 f.method.value = 'pager'; 6 f.submit(); 7}

「ResultListForm」を検索

html

1<form method="post" action="index.php?action_kouhyou_pref_search_list_result=true&amp;PrefCd=27" name="ResultListForm" id="sel_ResultListForm"> 2 <input type="hidden" name="method" value=""> 3 <input type="hidden" name="action_kouhyou_pref_search_list_result" value="true"> 4 <input type="hidden" name="p_count" value="5"> 5 <input type="hidden" name="p_offset" value="0"> 6 <input type="hidden" name="p_sort_name" value="48"> 7 <input type="hidden" name="p_order_name" value="1"> 8 <input type="hidden" name="PrefCd" value="27"> 9 <input type="hidden" name="OriPrefCd" value="27"> 10 <input type="hidden" name="ServiceType" value="">

このpost部分をマネしたらいいのでこんな感じになります。

python

1import time 2 3import requests 4from bs4 import BeautifulSoup 5 6headers = { 7 'User-Agent': 8 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko' 9} 10 11url = 'http://www.kaigokensaku.mhlw.go.jp/27/index.php?action_kouhyou_pref_search_list_result=true&PrefCd=27' 12 13for i in range(0, 200, 50): 14 15 payload = { 16 'method': 'pager', 17 'action_kouhyou_pref_search_list_result': 'true', 18 'p_count': 50, 19 'p_offset': i, 20 'p_sort_name': 48, 21 'p_order_name': 1, 22 'PrefCd': 27 23 } 24 25 r = requests.post(url, headers=headers, data=payload) 26 27 if r.status_code == requests.codes.ok: 28 29 soup = BeautifulSoup(r.content, 'html5lib') 30 31 time.sleep(10) 32 33 print(soup.prettify())

投稿2018/12/14 14:33

編集2018/12/14 15:12
barobaro

総合スコア1286

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatpka

2018/12/18 07:39

返信遅くなって申し訳ありません! ご回答ありがとうございました。 おかげさまで、ページ切り替えてスクレイプすることができました! 質問なのですが、どうやってjavascript内の「pagerForm」の中身を確認することができるのでしょうか。 それがわかれば今後:javascriptが出て来てもスクレイプできる気がするので。教えていただけたら嬉しいです!
guest

0

seleniumの練習で次へをクリックで作成しました。
なぜか最後の方になると取得できずにエラーで止まります。

python

1import time 2 3from bs4 import BeautifulSoup 4 5from selenium import webdriver 6from selenium.webdriver.common.by import By 7from selenium.webdriver.support import expected_conditions as EC 8from selenium.webdriver.support.ui import Select, WebDriverWait 9 10driver = webdriver.Firefox() 11 12# URL 13driver.get( 14 "http://www.kaigokensaku.mhlw.go.jp/27/index.php?action_kouhyou_pref_search_list_list=true&PrefCd=27" 15) 16 17# 待機 18wait = WebDriverWait(driver, 30) 19wait.until(EC.presence_of_element_located((By.ID, "resultListFrame"))) 20 21# iframeを変更 22iframe = driver.find_element_by_id('resultListFrame') 23driver.switch_to_frame(iframe) 24 25# 50件表示に変更 26select_element = driver.find_element_by_class_name('noPrint') 27Select(select_element).select_by_value('50') 28 29while True: 30 31 # 待機 32 wait.until( 33 EC.presence_of_element_located((By.CSS_SELECTOR, "li.pagerNext > a"))) 34 35 pagernext = driver.find_element_by_css_selector("li.pagerNext > a") 36 37 html = driver.page_source 38 soup = BeautifulSoup(html, 'html.parser') 39 40 # プログラム 41 42 if pagernext is None: 43 break 44 45 else: 46 pagernext.click() 47 time.sleep(3) 48 49driver.quit()

投稿2018/12/15 06:20

barobaro

総合スコア1286

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問