2017-05-26 192 views
0

這裏網站會列出一些基於下拉過濾器的數據,所以我試圖通過傳遞靜態下拉值來獲取這些數據,但我認爲由於視圖狀態我無法抓住這些數據。使用python抓取數據

任何人都有任何想法如何抓取使用viewstate的asp.net網站數據?

我收到以下錯誤

驗證視圖狀態MAC失敗。如果此應用程序由Web Farm或集羣託管,請確保<machineKey>配置指定相同的validationKey和驗證算法。 AutoGenerate不能在羣集中使用。

的Python腳本

import requests 
from bs4 import BeautifulSoup 

def get_viewstate(): 
url = "http://xlnindia.gov.in/frm_G_Cold_S_Query.aspx?ST=GJ" 
req = requests.get(url) 
data = req.text 

bs = BeautifulSoup(data) 
return bs.find("input", {"id": "__VIEWSTATE"}).attrs['value'] 

url = "http://xlnindia.gov.in/frm_G_Cold_S_Query.aspx?ST=GJ" 
data = {"__VIEWSTATE": get_viewstate(),"ST":'GJ', "ddldistrict":'AMR', "ddltaluka":'' ,"btnSearch":'Search'} 
req = requests.post(url, data) 

bs = BeautifulSoup(req.text) 
print(bs.prettify()) 
+1

給硒試一試? –

回答

1

我不認爲你可以requests做到這一點,但你可以很容易地做到這一點與selenium

安裝硒 - pip install seleniumpip3 install selenium
然後從您的機器上從this link下載最新的Chromedriver,並將driver複製到您的工作目錄。

您可以閱讀selenium文檔here

import time 
from selenium import webdriver 

url = "http://xlnindia.gov.in/frm_G_Cold_S_Query.aspx?ST=GJ" 
browser = webdriver.Chrome() 
browser.get(url) 

#change this if you want to change the state from Gujrat to something else 
#or you can change the state simply by changing the "?ST=GJ" part of the URL 
#state = browser.find_element_by_id("ddlState") 
#state.send_keys("BR") 

district = browser.find_element_by_id("ddldistrict") 
district.send_keys("AMR") 

#Skip this if you want to include all categories into the result 
category = browser.find_element_by_id("ddlCategory") 
category.send_keys("R") 

button = browser.find_element_by_id("btnSearch") 
button.click() 

time.sleep(10) 
browser.save_screenshot(browser.title + ".JPEG") 
html = browser.page_source 
print(html) 

browser.close() 
browser.quit() 


如果你想使用無頭瀏覽器selenium,使用PhantomJS。要了解如何使用PhantomJS閱讀this

+0

謝謝MD。 Khairul Basar,它完美的工作 –

+0

hey MD。 Khairul Basar你能幫我把每個字段的值存入mysql數據庫嗎? –

+0

@JunedAnsari可以試試看。 –