如何使用BeautifulSoup和请求抓取受密码保护的网站

时间:2019-09-11 20:16:02

标签: python web-scraping python-requests password-protection

我正在尝试访问受密码登录名(用户名和密码)保护的html页面。我尝试使用请求,但似乎不起作用。

import r
import requests
def Login():

    scrape_url = 'https://www.ecoledirecte.com/Eleves/3668/Notes'

    login_url = 'https://www.ecoledirecte.com/login'

    payload = {
        'username': '***',
        'password': '***'
    }


    with requests.Session() as session:
        post = session.post(login_url, data=payload)
        r = session.get(scrape_url)
        print(r.text)

我没有收到任何错误,但是print(r.text)仅提供了登录页面的html代码,而不提供scrape_url

1 个答案:

答案 0 :(得分:1)

您需要模拟您访问网站时浏览器的工作。如果尝试在浏览器的开发工具(instructions for Chrome)中登录并打开网络监视器,则会看到https://www.ecoledirecte.com/login的页面仅包含表单,这不是您想要的URL开机自检。

相反,当您输入用户名时,浏览器会使用包含以下内容的表单向https://api.ecoledirecte.com/v3/login.awp发送POST请求

data={
    "identifiant": "username",
    "motdepasse": "pass"
}

因此,您应该将登录代码更改为:

import json
...

    login_url = 'https://api.ecoledirecte.com/v3/login.awp'
    login_data = {
        'identifiant': 'username',
        'motdepasse': 'password'
    }
    payload = {'data': json.dumps(login_data)}
    with requests.Session() as session:
        post = session.post(login_url, data=payload)