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

Python 我如何使用BeautifulSoup和请求刮取受密码保护的网站,python,web-scraping,python-requests,password-protection,Python,Web Scraping,Python Requests,Password Protection,我试图访问一个受密码登录(用户名和密码)保护的html页面。我尝试使用请求,但似乎不起作用 importr 导入请求 def Login(): 刮擦https://www.ecoledirecte.com/Eleves/3668/Notes' 登录https://www.ecoledirecte.com/login' 有效载荷={ “用户名”:“***”, “密码”:“***” } 将requests.Session()作为会话: post=会话.post(登录地址,数据=有效负载) r=ses

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

importr
导入请求
def Login():
刮擦https://www.ecoledirecte.com/Eleves/3668/Notes'
登录https://www.ecoledirecte.com/login'
有效载荷={
“用户名”:“***”,
“密码”:“***”
}
将requests.Session()作为会话:
post=会话.post(登录地址,数据=有效负载)
r=session.get(scrape\u url)
打印(右文本)

我没有收到任何错误,但是
print(r.text)
只提供登录页面的html代码,而不是
scrape\u url

您需要模拟浏览器在访问网站时的操作。如果您尝试登录并在浏览器的dev tools()中打开网络监视器,您将看到位于的页面仅包含表单,而不是您要发布到的URL

相反,当您键入用户名时,浏览器会向发送一个POST请求,表单中包含

data={
    "identifiant": "username",
    "motdepasse": "pass"
}
因此,您应该将登录代码更改为:

导入json
...
登录https://api.ecoledirecte.com/v3/login.awp'
登录\u数据={
“标识人”:“用户名”,
“motdepasse”:“密码”
}
有效负载={'data':json.dumps(login_data)}
将requests.Session()作为会话:
post=会话.post(登录地址,数据=有效负载)

每个登录页面都可能不同,因此没有人能给你一个准确的答案,除非他们对你正在访问的特定页面这样做。。让请求登录工作的非猜测方式是,首先跟踪浏览器使用Fiddler(Windows)或mitm(linux)等工具登录时所做的操作,然后为请求登录重现相同的标题、参数和数据设置。此外,在请求会话中,您可能应该获得登录页面(与您的浏览器一样),以便在发布登录之前接收Cookie,