0

このページ (フォームがある) をスクレイピングする必要があります: http://kllads.kar.nic.in/MLAWise_reports.aspx、できれば Python (Python でない場合は JavaScript) を使用します。RoboBrowser (基本的にはMechanize + BeautifulSoup) や (おそらく) Seleniumなどのライブラリを調べていましたが、その方法についてはよくわかりません。要素を調べると、入力する必要があるのは WebForm のようです。入力後、Web ページは保存する必要のあるデータを生成します。どうすればいいですか?

4

1 に答える 1

1

Selenium では、JavaScript Web フォームを比較的簡単に操作できます。Web ドライバをすばやくインストールする必要があるかもしれませんが、それ以外に必要なことは、xpath を使用してフォームを検索し、オプションの xpath を使用してドロップダウン メニューからオプションを Selenium に選択させることだけです。提供された Web ページの場合、次のようになります。

#import functions from selenium module
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# open chrome browser using webdriver
path_to_chromedriver = '/Users/Michael/Downloads/chromedriver'
browser = webdriver.Chrome(executable_path=path_to_chromedriver)

# open web page using browser
browser.get('http://kllads.kar.nic.in/MLAWise_reports.aspx')

# wait for page to load then find 'Constituency Name' dropdown and select 'Aland (46)''
const_name = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="ddlconstname"]')))
browser.find_element_by_xpath('//*[@id="ddlconstname"]/option[2]').click()

# wait for the page to load then find 'Select Status' dropdown and select 'OnGoing'
sel_status = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="ddlstatus1"]')))
browser.find_element_by_xpath('//*[@id="ddlstatus1"]/option[2]').click()

# wait for browser to load then click 'Generate Report'
gen_report = WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="BtnReport"]')))
browser.find_element_by_xpath('//*[@id="BtnReport"]').click()

各インタラクションの間に、次の要素をクリックしようとする前にブラウザをロードする時間を与えているだけです。すべてのフォームに入力すると、選択したオプションに基づいてページにデータが表示され、テーブル データをスクレイピングできるようになります。最初の Constituency Name オプションのデータを読み込もうとしたときにいくつかの問題がありましたが、他のオプションは問題なく動作しているようでした。

また、各 Web フォームで使用可能なすべてのドロップダウン オプションをループして、すべてのデータを表示できる必要があります。

それが役立つことを願っています!

于 2015-10-07T08:20:34.093 に答える