Не удается разобрать защищенную страницу за порталом входа в систему - модуль запросов Python - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь проанализировать данные с этого URL: http://134.209.71.24/ui/attacks/,, но я не могу, потому что есть страница входа на http://134.209.71.24/ui/login/?next=%2F. Я использую модуль Python requests с BeautifulSoup.

nikhilh@ubuntu:~/combine$ python -V
Python 2.7.15rc1

Я написал следующий код:

import re
import sys
import requests
from bs4 import BeautifulSoup

url = "http://134.209.71.24/ui/attacks/"
url_login = re.sub('attacks', 'login/?next=%2F', url)
print('Need to login into ' + url_login)

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0'}

with requests.Session() as client:
    soup = BeautifulSoup(client.get(url_login).text, 'lxml')

    # Find csrf token value
    csrftoken_field = soup.find_all("input", type="hidden")
    csrftoken_value = csrftoken_field[0]['value']
    login_data = {"email": "valid_email",
                  "passwd": "valid_passwd",
                  "_csrf_token": csrftoken_value}

    # login
    post_result = client.post(url_login, data=login_data, headers=headers)

    status_code = post_result.status_code
    if status_code == 502:
        print("Failed to login into " + url_login + ". Exiting...")
        sys.exit();
    print("Status code: " + str(status_code) + ". Login successful")

    # Get required data from URL
    read_data = client.get(url)
    print(read_data.text)

Я получаю код ответа 200 после входа в систему, но при попытке разобрать http://134.209.71.24/ui/attacks/ после завершения входа в систему я по-прежнему получаю HTML-документ страницы входа.Вот соответствующие части вывода:

Need to login into http://134.209.71.24/ui/login/?next=%2F/
Status code: 200. Login successful
<!doctype html>
...
...
    <input id="_csrf_token" name="_csrf_token" type="hidden" value="valid_csrf_token">
    <fieldset>
        <legend>Log In</legend>
        <label>Email</label>
        <input id="email" name="email" type="text" />
        <label>Password</label>
        <input id="passwd" name="passwd" type="password" />
...
...
...