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

标签 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

最佳答案

您需要模拟访问网站时浏览器正在执行的操作。如果您尝试登录并在浏览器的开发工具中打开网络监视器 ( 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/

相关文章:

Python 请求:在哪里可以找到所有可能的属性?

python - S3.Client.upload_file() 和 S3.Client.upload_fileobj() 有什么区别?

python - 带有 bool OR 的 Pandas groupby

python - 使用代理发出 python 3 请求

python - 从网页中抓取特定文本

php - 什么是向导?

python - 使用请求模块导出 csv

python - 属性错误 : 'Manager' object has no attribute 'get_by_natural_key' error in Django?

javascript - 集成 Python 和 JavaScript 的最佳方式?

google-sheets - importXML 解析错误