2013-08-29 3 views
1

Я пытаюсь создать webscraper для извлечения моих данных статистики из MWO Mercs. Для этого необходимо войти на страницу, а затем пройти через 6 разных страниц статистики, чтобы получить данные (это позже войдет в базу данных, но это не мой вопрос).Войдите на веб-страницу с помощью python, чтобы очистить данные

Форма Войти приводится ниже (от https://mwomercs.com/login?return=/profile/stats?type=mech)- от того, что я вижу, есть два поля, которые нуждаются в данных ПОЧТОВЫЕ и ПАРОЛЬ и должны быть размещены. Он должен затем открыть http://mwomercs.com/profile/stats?type=mech. После этого мне нужно иметь сеанс . к циклу через различную статистику страниц

Я попытался с помощью URLLIB, механизировать и запросы, но я был совершенно не в состоянии найти правильный ответ - я предпочел бы использовать повторно квесты.

Я понимаю, что подобные вопросы заданы в stackoverflow, но я искал очень долгое время без успеха.

Спасибо за любую помощь, которая может быть предоставлена ​​

<div id="stubPage"> 
    <div class="container"> 
     <h1 id="stubPageTitle">LOGIN</h1> 
     <div id="loginForm"> 
      <form action="/do/login" method="post"> 

       <legend>MechWarrior Online <a href="/signup" class="btn btn-warning pull-right">REGISTER</a></legend> 


       <label>Email Address:</label> 
       <div class="input-prepend"><span class="add-on textColorBlack textPlain">@</span><input id="email" name="email" class="span4" size="16" type="text" placeholder="[email protected]"></div> 

       <label>Password:</label> 

       <div class="input-prepend"><span class="add-on"><span class="icon-lock"></span></span><input id="password" name="password" class="span4" size="16" type="password"></div> 

       <br> 
       <button type="submit" class="btn btn-large btn-block btn-primary">LOGIN</button> 

       <br> 
       <span class="pull-right">[ <a href="#" id="forgotLink">Forgot Your Password?</a> ]</span> 

       <br> 
       <input type="hidden" name="return" value="/profile/stats?type=mech"> 
      </form> 
     </div> 
    </div> 
</div> 

ответ

1

Документация Просьбы очень проста и легко следовать, когда речь идет о представлении данных формы. Просьба прочесть это: More Complicated POST requests

Вход в систему обычно сводится к сохранению файла cookie и отправке его с будущими запросами.

После того, как вы отправили сообщение на страницу входа в систему с помощью requests.post(), используйте объект запроса, чтобы удалить файлы cookie. Это один из способов сделать это:

post_headers = {'content-type': 'application/x-www-form-urlencoded'} 
payload = {'username':username, 'password':password} 
login_request = requests.post(login_url, data=payload, headers=post_headers) 
cookie_dict = login_request.cookies.get_dict() 
stats_reqest = requests.get(stats_url, cookies=cookie_dict) 

Если у вас возникли проблемы, проверьте код возврата из запроса с login_request.status_code или содержания страницы для ошибки с login_request.text

Edit:

Некоторые сайты будут перенаправлять вас несколько раз, когда вы делаете запрос. Обязательно проверьте объект request.history, чтобы узнать, что произошло, и почему вы получили отскок. Например, я получаю редирект, как это все время:

>>> some_request.history 
(<Response [302]>, <Response [302]>) 

Каждый элемент в истории кортеж другой запрос. Вы можете проверить их, как обычные объекты запросов, такие как request.history[0].url и вы можете отключить переадресацию, поставив allow_redirects=False в ваших параметрах запроса:

login_request = requests.post(login_url, data=payload, headers=post_headers, allow_redirects=False) 

В некоторых случаях, я должен был запретить редирект и добавлять новый куки, прежде чем переходить на соответствующую страницу. Попробуйте использовать что-то вроде этого, чтобы сохранить существующий куки и добавить новый куки к нему:

cookie_dict = dict(cookie_dict.items() + new_request.cookies.get_dict().items()) 

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

+0

Большое спасибо за ваш ответ Amarok: –

+0

пытался написать это в комментарии, но тайм-аут.приведенное выше меня немного ускоряет. Я получаю cookie php session, например {'PHPSESSID': 'amt50v2g27sbbtjockock87bn6'}, но я не могу получить страницу реальной статистики. Я всегда получаю текст со страницы входа. Я использую код ниже –

+0

Будьте предельно осторожны при размещении своего пароля! Проверьте мои правки выше. – Amarok

Смежные вопросы