如何使用python将请求发布到.aspx页面

时间:2018-07-10 03:31:19

标签: python asp.net beautifulsoup python-requests urllib

我正在尝试抓取以下网站:https://wwwapps.ncmedboard.org/Clients/NCBOM/Public/LicenseeInformationResults.aspx

为了抓取每个页面,我需要首先在.aspx页面上进行搜索,方法是输入名字和姓氏并启动搜索。

利用互联网上的资源,我整理了以下http POST请求:

url = 'https://wwwapps.ncmedboard.org/Clients/NCBOM/Public/LicenseeInformationResults.aspx'

headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'en-GB,en;q=0.9,en-US;q=0.8,zh-TW;q=0.7,zh;q=0.6,zh-CN;q=0.5'
}

session = requests.session()
response = session.get(url, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'})
soup = BeautifulSoup(response.content, 'html.parser')
form_data = {
    '__VIEWSTATE': soup.find('input', {'name': '__VIEWSTATE'}).get('value'),
    '__VIEWSTATEGENERATOR': soup.find('input', {'name': '__VIEWSTATEGENERATOR'}).get('value'),
    'waLastName':'Smith',
    'waFirstName':'John',
    '__EVENTTARGET':'btnNext'
}

f = session.post(url, data=form_data, headers=headers)
soup = BeautifulSoup(f.content, 'html.parser')
for a in soup.find_all('a', href=True):
    print("Found the URL:" + a['href'])

该帖子似乎没有任何效果,因为当您在发布请求之后查看html时,它似乎没有显示结果页面。为何会出现这种情况?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可能需要设置asp.net会话cookie,它将为每个新会话生成新的会话cookie。对于您的网站(https://wwwapps.ncmedboard.org),该值是ASP.NET_SessionId =(网站提供的您的sessionid的值)

如果未正确验证CSRF,则可能会绕过它。