Как очистить защищенный паролем сайт - PullRequest
1 голос
/ 24 мая 2019

У меня проблемы с очисткой защищенного паролем сайта. Я знаю, что существует множество вопросов, но ни один из них не решил мою проблему.

Проблема в том, что я не знаю, в чем проблема. Я получаю 200 ответ от их сервера, однако, это не тот контент, который я ожидаю. Это действительно большая HTML-структура, но есть такие слова, как «доступ», «RequestURLDenied», «пароль», «справка», «вход», что указывает на то, что моя попытка входа в систему не прошла должным образом. Я не знаю, что изменить, хотя? У кого-нибудь есть опыт соскоба?

Это мой код (извлечено из здесь ):

import requests
from lxml import html

USERNAME = "XXX"
PASSWORD = "XXX"
LOGIN_URL = "https://signin.lexisnexis.com/lnaccess/app/signin?back=https%3A%2F%2Fadvance.lexis.com%3A443%2Fnexis-uni%2Flaapi%2Fpermalink%2F35a8b8d7-925d-4219-b89d-af27c10a7a31%2F%3Fcontext%3D1516831&aci=nu"
LOGIN_URL2 = "https://signin.lexisnexis.com:443/lnaccess/Transition?aci=nu"
URL = "https://advance.lexis.com/api/document?collection=news&id=urn:contentItem:7XM6-WXH0-Y9M6-H1V0-00000-00&context=1516831"

def main():
    # Create session
    session = requests.session()

    # Get login cookies
    session.get(LOGIN_URL)

    # Create payload - used to log into password protected area
    login_data = {
        "rmtoken": "dummy", 
        "request_id": "null", 
        "OAM_REQ": "null", 
        "userid": USERNAME,
        "password": PASSWORD,  
        "rmflag": "0", 
        "aci": "nu"
    }

    # Perform login
    session.post(LOGIN_URL, data = login_data)

    # Scrape url
    result = session.get(URL)

    # Content
    print(result.content)


if __name__ == '__main__':
    main()

Вот как выглядит ответ при запуске сценария:

script output

Еще один вопрос: скажем, я дошел до того, что могу войти в систему из кода и выполнить пару тысяч запросов к серверу для извлечения текста, может ли это вызвать проблемы с их сервером: D?

1 Ответ

1 голос
/ 24 мая 2019

В целом ваш код выглядит правильно, вы только что допустили несколько ошибок с URL-адресом, на который отправляете запрос POST, и используете неполную полезную нагрузку.

Попробуйте следующий код:

import requests
from lxml import html
from lxml.etree import tostring

USERNAME = "XXX"
PASSWORD = "XXX"
LOGIN_URL = "https://signin.lexisnexis.com/lnaccess/app/signin?back=https%3A%2F%2Fadvance.lexis.com%3A443%2Fnexis-uni%2Flaapi%2Fpermalink%2F35a8b8d7-925d-4219-b89d-af27c10a7a31%2F%3Fcontext%3D1516831&aci=nu"
URL = "https://advance.lexis.com/api/document?collection=news&id=urn:contentItem:7XM6-WXH0-Y9M6-H1V0-00000-00&context=1516831"

def main():
    session_requests = requests.session()

    # Get login cookies
    session_requests.get(LOGIN_URL)

    # Create payload - used to log into password protected are
    payload = {
        "rmtoken": "dummy", 
        "request_id": "null", 
        "OAM_REQ": "null", 
        "userid": USERNAME,
        "password": PASSWORD,  
        "rmflag": "0", 
        "aci": "nu"
    }

    # Perform login
    result = session_requests.post("https://signin.lexisnexis.com:443/lnaccess/Transition?aci=nu", data = payload)

    # Scrape url
    result = session_requests.get(URL)
    tree = html.fromstring(result.content)
    # bucket_names = tree.xpath("//div[@class='repo-list--repo']/a/text()")

    print(tostring(tree))

if __name__ == '__main__':
    main()

Надеюсь, это поможет

...