2015-10-07 174 views
-1

我需要刮這個頁面(它有一個表格):http://kllads.kar.nic.in/MLAWise_reports.aspx,最好用Python(如果不是Python,那麼JavaScript)。我在尋找類似RoboBrowser(基本上是Mechanize + BeautifulSoup)和(可能)Selenium這樣的圖書館,但我不太清楚如何去做。從檢查元素看來,它似乎是我需要填寫的一個WebForm。填充完成後,網頁會生成一些我需要存儲的數據。我應該怎麼做?我該如何刮這個?

+2

一個選項是使用scrapy [鏈接](http://doc.scrapy.org/)。爲了使表單提交[鏈接](http://doc.scrapy.org/en/latest/topics/request-response.html)可以被引用。 – Kadir

+0

請閱讀指南[我如何提出一個好問題](http://stackoverflow.com/help/how-to-ask),特別是關於最小,完整和可驗證示例(MCVE)的部分。這將幫助你爲自己解決問題。如果你這樣做,仍然卡住,你可以回來發佈你的MCVE,你試過的,以及結果是什麼,所以我們可以更好地幫助你。 – JeffC

回答

1

您可以用JavaScript的Web表單相對容易地在硒互動。您可能需要快速安裝webdriver,但除此之外,您只需使用xpath查找表單,然後讓Selenium使用選項的xpath從下拉菜單中選擇一個選項。對於所提供的網頁,會是這個樣子:

#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() 

每個之間的互動,你只是給瀏覽器一段時間嘗試點擊下一個元素之前加載。一旦填寫完所有表格,頁面將顯示基於所選選項的數據,並且您應該能夠刪除表格數據。在嘗試爲第一個選區名稱選項加載數據時,我遇到了一些問題,但其他人似乎工作正常。

你也應該能夠遍歷所有的每個網頁的形式下可顯示所有數據的下拉選項。

希望有幫助!

+0

謝謝!當您調用browser.get(url)時,Selenium會打開一個窗口嗎?我只是好奇。 – Mathguy

+0

是的。但是,如果您想讓所有功能都正常工作時隱藏瀏覽器,則幾乎沒有辦法解決這個問題。一種選擇是使用無頭像webdriver,如PhantomJS。我還閱讀了關於爲webdriver設置虛擬顯示以使用虛擬顯示模塊運行的信息。更多關於這個和其他選項可以在這裏找到:。 –

+0

完美!謝謝! – Mathguy