今回のプログラムと起こっている不具合について
現在、selenium、chromedriverで情報抽出をするプログラムを書いています。具体的な機能は、GISフリーサービス(http://www.gis-tool.com/mapview/maptocoordinates.html)にアクセスし、地名を入力し、検索ボタンを押し、その後そのページから経度と緯度をスクレイピングする内容のプログラムを書いています。
プログラム自体はエラーは無く、実行するとchromedriverがきちんと動き地名を入力し、検索をかけてページを移動することも確認済みです。
しかし、実際に座標を返す時に、座標の値に不具合があってどうにも直し方がわからないので相談させていただきました。
発生している問題・エラーメッセージ
. >>> === RESTART: map_adress改.py === 大阪駅 : 139.691706 / 35.689487 京都駅 : 135.758766 / 34.985849 大阪天満宮 : 135.758766 / 34.985849 ['大阪駅', '京都駅', '大阪天満宮'] ['139.691706', '135.758766', '135.758766'] ['35.689487', '34.985849', '34.985849'] >>> === RESTART: map_adress改.py === 大阪駅 : / 京都駅 : 139.691706 / 35.689487 大阪天満宮 : 139.691706 / 35.689487 ['大阪駅', '京都駅', '大阪天満宮'] ['', '139.691706', '139.691706'] ['', '35.689487', '35.689487'] >>>
このようにプログラムのエラー自体は無いのですが実行したときによって出力結果が異なります。座標を実際に照らし合わせてみると、すべてスクレイピングしている時でも取得している座標がずれてしまっています。
ちなみに、座標の正解値は以下のようになります。
座標例 正解値
大阪駅:135.495950 / 34.702485
京都駅:135.758766 / 34.985849
大阪天満宮:135.512616 / 34.696060
今回の出力では、最初の実行結果はすべてスクレイピング出来ているように見えますが座標は、
大阪駅:デフォルトの東京駅の座標
京都駅:京都駅の座標
大阪天満宮:京都駅の座標
という風にずれたり、前の座標をスクレイピングしてしまっています。
該当のソースコード
python
1from selenium import webdriver 2from selenium.webdriver.chrome.options import Options 3 4def map_adress(place_list): 5 6 lon_list = [] 7 lat_list = [] 8 9 browser = webdriver.Chrome(executable_path='C:\chromedriver.exe') 10 browser.implicitly_wait(3) 11 #座標変換ページにアクセス 12 url_login = "http://www.gis-tool.com/mapview/maptocoordinates.html" 13 browser.get(url_login) 14 15 for item in place_list: 16 #print(item,"の情報を取得します") 17 18 #テキストボックスに地名を入力 19 e = browser.find_element_by_id("address") 20 e.clear() 21 e.send_keys(item) 22 23 #フォームを送信 24 frm = browser.find_element_by_id("search") 25 frm.submit() 26 #print("情報を入力して検索ボタンを押しました") 27 28 lon = browser.find_element_by_id("longitude") 29 lat = browser.find_element_by_id("latitude") 30 31 lon_v = lon.get_attribute("value") 32 lat_v = lat.get_attribute("value") 33 34 print(item,":",lon_v,"/",lat_v) 35 36 lon_list.append(lon_v) 37 lat_list.append(lat_v) 38 39 40 #browser.close() 41 #print("経度:",lon,"緯度:",lat) 42 43 return lon_list,lat_list 44 45 46station = ["大阪駅","京都駅","大阪天満宮"] 47 48result = map_adress(station) 49print(station) 50print(result[0]) 51print(result[1]) 52
試したこと
エラーが出なかったためエラーメッセージの項目の出力のようにprintでその都度スクレイピングした内容を出力して確かめるようにしました。
また、chromedriverによって動くchromeの挙動を見ていると、ページを読み込んでいる間にスクレイピングしているように見えたため、ソースコードの「#print("情報を入力して検索ボタンを押しました")」の次の行に browser.implicitly_wait("秒数")を追加して待ち時間を設けてみました。最大60秒まで変えてみましたが結果に変化はありませんでした。
補足情報(FW/ツールのバージョンなど)
chromedriverはPCのCドライバ直下においており、PATHに追加済み
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/30 06:04