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

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

ただいまの
回答率

90.85%

  • HTML

    7799questions

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

  • Python

    5932questions

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

  • Scrapy

    63questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 99

ynj

score 3

ページ遷移した際に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>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

この様な 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/06/03 23: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)

    キャンセル

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

  • ただいまの回答率 90.85%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • HTML

    7799questions

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

  • Python

    5932questions

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

  • Scrapy

    63questions

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