使用python获取数据

时间:2017-05-26 07:24:34

标签: python web-scraping beautifulsoup

这里的网站会根据下拉过滤器列出一些数据,所以我试图通过传递静态下拉值来获取这些数据,但我认为由于查看状态我无法获取这些数据。

  

任何人都知道如何获取使用viewstate的asp.net网站数据?

我收到以下错误

  

viewstate MAC验证失败。如果此应用程序由Web场或群集托管,请确保< machineKey> configuration指定相同的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 个答案:

答案 0 :(得分: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

执行此操作