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

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

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

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

Python

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

Scrapy

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

Q&A

解決済

1回答

1826閲覧

href要素が "JavaScript:submit" となっているurlにリクエストしたいができません。

tatpka

総合スコア17

JavaScript

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

Python

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

Scrapy

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

0グッド

0クリップ

投稿2018/12/08 11:56

前提・実現したいこと

pythonでwebスクレイピングをしてこちらのサイト(「国土交通省地価公示・都道府県地価調査」http://www.land.mlit.go.jp/landPrice/AriaServlet?MOD=2&TYP=0)
で地価の情報を集めています。

そのためにクローラーを使って地図をクリックし、その先のurlにリクエストしたいと考えていますが、
areaというタグのhref要素が href = "javascript:submit_f('number')"となっており、
このhrefにアクセスしようと思ってもすることができません。

このアドレスにクローラーでrequestする方法はあるのでしょうか。
よろしくお願い致します。

発生している問題・エラーメッセージ

InvalidSchema Traceback (most recent call last) <ipython-input-20-5c21d5d35b04> in <module>() 12 prefecture = root.xpath("//*[@id='map']/area[20]") 13 url = prefecture[0].attrib["href"] ---> 14 requests.post(url) InvalidSchema: No connection adapters were found for 'javascript:submit_f('27')'

該当のソースコード

import requests import lxml.html r = requests.get("http://www.land.mlit.go.jp/landPrice/AriaServlet?MOD=2&TYP=0") html = r.text root = lxml.html.fromstring(html) prefecture = root.xpath("//*[@id='map']/area[20]") url = prefecture[0].attrib["href"] requests.post(url)

試したこと

seleniumでgoogledriverでリクエストしようとしてもできなかったです。

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

javascriptを抽出するとURLを生成しているだけです。

javascript

1var mode = 2; 2function submit_f(code){ 3 4 if(document.forms["frm"].elements["kenflg"].checked){ 5 urlString = "SearchServlet?TDK=" + code + "&MOD=" + mode; 6 }else{ 7 urlString = "AriaServlet?TYP=1&TDK=" + code + "&MOD=" + mode; 8 } 9 if((document.forms["frm"].elements["kenflg"].checked) || (code != "01")){ 10 document.location.href = urlString; 11 } 12}

'javascript:submit_f('27')'

だと

python

1area = '27' 2 3# 都道府県単位 4'http://www.land.mlit.go.jp/landPrice/SearchServlet?TDK={}&MOD=2'.format(area) 5 6# 都道府県単位のマップ表示 7'http://www.land.mlit.go.jp/landPrice/AriaServlet?TYP=1&TDK={}&MOD=2'.format(area)

にアクセスしたらいいです。

エリアの抽出は以下の通りです

python

1from bs4 import BeautifulSoup 2import re 3 4url = 'http://www.land.mlit.go.jp/landPrice/AriaServlet?MOD=2&TYP=0' 5 6r = requests.get(url) 7 8soup = BeautifulSoup(r.content, 'html5lib') 9 10for i in soup.find_all('area', {'shape': 'rect'}): 11 area = re.search(r'\d{2,3}', i.get('href')).group() 12 print(area)

投稿2018/12/08 13:23

barobaro

総合スコア1286

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

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

tatpka

2018/12/08 14:14

requestすることができました! わかりやすい説明ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問