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

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

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

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

Scrapy

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

4924閲覧

python、ページ遷移時にurlが変わらないwebページのスクレイピング

ynj

総合スコア17

Python

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

Scrapy

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2018/05/31 16:58

ページ遷移した際にurlが変わらないwebページを、スクレイピングしてみたいと考えています。

例えばhttp://www.wam.go.jp/shofukupub/ApplicationServletの、下記コードの場合、
<button type="submit">次の15件</button>
今までは上記部分に次ページへのurlが記載されており、それを取得していました。
このページの場合、
<input type="hidden" name="PAGE" value="2">
のvalueの値が遷移合わせて変わっていくようです。

この様なwebページををスクレイピングする事は可能なのでしょうか?
また、これは遷移時にurlが変わらないというのは、どういった仕組み/技術なのでしょうか?
お答えいただければ幸いです。よろしくお願いします。

<div align="right" style="margin-right:1em;"> <table style="border:0"> <tbody> <tr> <td style="border:0px;text-align:left"> <form class="noprint" method="POST" action="ApplicationServlet"> <input type="hidden" name="ACTIONTYPE" value="SearchSiteEnterAction"> <input type="hidden" name="BFLG" value=""> <input type="hidden" name="PREF" value="27">    <input type="hidden" name="MAINTARGET_1" value=""> <input type="hidden" name="MAINTARGET_2" value=""> <input type="hidden" name="MAINTARGET_3" value=""> <input type="hidden" name="MAINTARGET_4" value=""> <input type="hidden" name="MAINTARGET_5" value=""> <input type="hidden" name="SUBTARGET_1" value=""> <input type="hidden" name="SUBTARGET_2" value=""> <input type="hidden" name="SUBTARGET_3" value=""> <input type="hidden" name="SUBTARGET_4" value=""> <input type="hidden" name="SRVC11" value=""> <input type="hidden" name="SRVC12" value=""> <input type="hidden" name="SRVC13" value=""> <input type="hidden" name="SRVC14" value=""> <input type="hidden" name="SRVC15" value=""> <input type="hidden" name="SRVC24" value=""> <input type="hidden" name="SRVC52" value=""> <input type="hidden" name="SRVC53" value=""> <input type="hidden" name="SRVC54" value="">                  <input type="hidden" name="SRVC21" value=""> <input type="hidden" name="SRVC22" value=""> <input type="hidden" name="SRVC41" value=""> <input type="hidden" name="SRVC42" value=""> <input type="hidden" name="SRVC43" value=""> <input type="hidden" name="SRVC44" value=""> <input type="hidden" name="SRVC45" value=""> <input type="hidden" name="SRVC46" value=""> <input type="hidden" name="SRVC32" value=""> <input type="hidden" name="SRVC33" value=""> <input type="hidden" name="SRVC34" value=""> <input type="hidden" name="ORDER" value="1"> <input type="hidden" name="PAGE" value="2"> <input type="hidden" name="PREF_SEARCH_SIZE" value=""> <input type="hidden" name="TOWNCODESEPARATER" value=","> <input type="hidden" name="TOWNNAMESEPARATER" value=","> <span class="btnSmall" style="width:70px"> <span> <span> <button type="submit">次の15件</button> </span> </span>   </span>&nbsp;&nbsp;</form> </td> </tr> </tbody> </table> </div>

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

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

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

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

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

guest

回答1

0

ベストアンサー

この様な web ページををスクレイピングする事は可能なのでしょうか?

技術的には可能。

また、これは遷移時に url が変わらないというのは、どういった仕組み/技術なのでしょうか?

このサイトの場合は、GET ではなく POST でデータを送信しているためですね。


<form class="noprint" method="POST" action="ApplicationServlet">

とありますので、次画面への移動にフォームを使っていますね。

掲示板のメッセージ投稿のように form タグを使っているので、button をクリックすることで、input タグで指定された内容(検索条件?)を POST で送って次画面を表示しています。

Requests 等を使って、INPUTで指定された送信するデータを組み立てて、POST で送信して次の画面を取得する必要がありそうです。

ヒントとしては...

payload = {'key1': 'value1', 'key2': 'value2'} # INPUT で渡されているパラメータをすべて r = requests.post("http://example.com/post", data=payload)

のような感じでしょうか。

requests については、ドキュメントを参照してください。
Requests クイックスタート

投稿2018/05/31 23:40

編集2018/05/31 23:42
CHERRY

総合スコア25171

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

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

ynj

2018/06/03 14:48 編集

ご返事遅くなりすいません。 GET/POSTも良く解っていなかった為、理解/実行するのに時間がかかっていました。 とりあえずツギハギしながら下記のような形で実行できました。 また疑問が出た際は助けていただければと思います。ありがとうございました。 ※下記記載のコードで問題および改良点があれば、ご指摘いただければ助かります。 import requests from bs4 import BeautifulSoup import re for x in range(5): b = {"ACTIONTYPE": "SearchSiteEnterAction", "PREF": "27", "ORDER": "1", "PAGE": x } r = requests.post("http://www.wam.go.jp/shofukupub/ApplicationServlet",data=b) bs=BeautifulSoup(r.text, "lxml") z=bs.find_all(headers=re.compile(r"^no")) for i in z: print(i.text)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問