我正在尝试访问受密码登录(用户名和密码)保护的 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
。
最佳答案
您需要模拟访问网站时浏览器正在执行的操作。如果您尝试登录并在浏览器的开发工具中打开网络监视器 ( instructions for Chrome ),您将看到页面 https://www.ecoledirecte.com/login仅包含表单,这不是您要 POST 到的 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)
关于python - 如何使用 BeautifulSoup 和请求抓取受密码保护的网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57896219/