用身份验证刮除ASPX页面。使用Python 3

时间:2018-10-18 13:49:33

标签: asp.net python-3.x web-scraping beautifulsoup python-requests

我正在尝试使用python的请求库来抓取ASPX网站并从内部的Table获取信息。

How to web scrap an ASPX page that requires authentication中也很好地描述了我遇到的问题,在撰写本文时未作任何答复。

我目前的处理方式是:

  • 创建请求会话,
  • 获取请求标头。
  • 使用BeautifulSoup解析从get请求接收的信息。
  • 将所有参数设置为login_data字典。

    headers={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36"}
    
    with  requests.session() as session:
        session.headers.update(headers)
        response=session.get(login_url)
        soup=BeautifulSoup(response.content)
    
        VIEWSTATE = soup.find(id="__VIEWSTATE")['value']
        VIEWSTATEGENERATOR = soup.find(id="__VIEWSTATEGENERATOR")['value']
        EVENTVALIDATION = soup.find(id="__EVENTVALIDATION")['value']
        EVENTTARGET = soup.find(id="__EVENTTARGET")['value']
        EVENTARGUEMENT = soup.find(id="__EVENTARGUMENT")['value']
        PREVIOUSPAGE = soup.find(id="__PREVIOUSPAGE")['value']
        CMSESSIONID = soup.find(id="CMSessionId")['value']
    
        soup.find(id="MasterHeaderPlaceHolder_ctl00_userNameTextbox")['value']
    
        login_data= {
            "__VIEWSTATE" : VIEWSTATE,
            "txtUserName" : account_name,
            "txtPassword" : account_pass,
            "__VIEWSTATEGENERATOR" : VIEWSTATEGENERATOR,
            "__EVENTVALIDATION": EVENTVALIDATION,
            "__EVENTTARGET" : EVENTTARGET,
            "__EVENTARGUEMENT" : EVENTARGUEMENT,
            "__PREVIOUSPAGE" : PREVIOUSPAGE,
            "CMSessionId" : CMSESSIONID,
            "MasterHeaderPlaceHolder_ctl00_userNameTextbox" : account_name,
            "MasterHeaderPlaceHolder_ctl00_passwordTextbox" : account_pass,
            "MasterHeaderPlaceHolder_ctl00_tempPasswordTextbox" : account_pass
             }
    
        login_data_encoded = urllib.parse.urlencode(login_data) #*
    

此外,将login_data字典作为数据传递到对login_url的发布请求。

然后使用同一会话尝试从report_url获取请求。

response_1 = session.post(login_url, data=login_data)
response_2 = session.get(report_url)

问题似乎是未实现登录。因为将get请求重新路由到登录页面。

任何人都可以阐明为什么会这样吗?我猜这是正确的流程,但是如果我做错了什么或者可以改善的话,请告诉我。

不幸的是,我目前仅限于仅使用请求或其他流行的python 3库(因为对此主题的某些答复中建议使用对“浏览器” .exe文件的引用是不可行的。)< / p>

0 个答案:

没有答案
相关问题