2016-04-07 3 views
1

Я использую Python 3, чтобы написать сценарий для входа в Amazon, чтобы захватить мои подсветки Kindle. Она основана на этой статье: https://blog.jverkamp.com/2015/07/02/scraping-kindle-highlights/Невозможно войти в Amazon с помощью Python

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

<RequestsCookieJar[<Cookie ubid-main=189-4768762-8531647 for .amazon.com/>]> 
Failed to login: 

Please Enable Cookies to Continue 

To continue shopping at Amazon.com, please enable cookies in your Web browser. 
Learn more about cookies and how to enable them. 

Я включил запросы сеансы для обработки печенья, но это Безразлично Кажется, он работает.

Вот код, я использую, чтобы попытаться сделать это:

import bs4, requests 

session = requests.Session() 
session.headers = { 
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36' 
} 

# Log in to Amazon, we have to get the real login page to bypass CSRF 
print('Logging in...') 
response = session.get('https://kindle.amazon.com/login') 

soup = bs4.BeautifulSoup(response.text, "html.parser") 

signin_data = {} 
signin_form = soup.find('form', {'name': 'signIn'}) 
for field in signin_form.find_all('input'): 
    try: 
     signin_data[field['name']] = field['value'] 
    except: 
     pass 

signin_data[u'ap_email'] = 'myemail' 
signin_data[u'ap_password'] = 'mypassword' 


response = session.post('https://www.amazon.com/ap/signin', data = signin_data) 

soup = bs4.BeautifulSoup(response.text, "html.parser") 

warning = soup.find('div', {'id': 'message_warning'}) 
if warning: 
    print('Failed to login: {0}'.format(warning.text)) 

Есть ли что-то я пропускаю с моим использованием сессий?

ответ

1

Ваша форма для входа в аккаунт данные фактически не исправить это должно быть электронной и пароль:

signin_data[u'email'] = 'your_email' 
signin_data[u'password'] = 'your_password' 

Вы также можете избежать попробовать с помощью CSS выбрать и has_attr:

import bs4, requests 

headers = { 
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36' 
} 

from bs4 import BeautifulSoup 

with requests.Session() as s: 
    s.headers = headers 
    r = s.get('https://kindle.amazon.com/login') 
    soup = BeautifulSoup(r.content, "html.parser") 
    signin_data = {s["name"]: s["value"] 
        for s in soup.select("form[name=signIn]")[0].select("input[name]") 
        if s.has_attr("value")} 

    signin_data[u'email'] = 'your_em' 
    signin_data[u'password'] = 'pass' 

    response = s.post('https://www.amazon.com/ap/signin', data=signin_data) 
    soup = bs4.BeautifulSoup(response.text, "html.parser") 
    warning = soup.find('div', {'id': 'message_warning'}) 
    if warning: 
     print('Failed to login: {0}'.format(warning.text)) 
    print(response.content) 

В первой строке вы можете увидеть <title>Amazon Kindle: Home</title> в конце:

b'<?xml version="1.0" encoding="utf-8"?>\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">\n <head>\n <title>Amazon Kindle: Home</title>\n 

Если он не работает, вы должны обновить свою версию запросов и попробовать другой пользовательский агент. Как только я сменил ap_email и ap_password, я вошел в систему в порядке.

+0

Спасибо за ответ. Я обновил код до вашего предложения, но все же получил ту же ошибку. – tjm

+0

@tjm, код отлично работает, какая версия запросов bs4 вы используете? –

+0

Я использую bs4 0.0.1. Я принял ваше предложение и удалил попытку. Это похоже на трюк, и теперь я получаю Amazon Kindle: Home html. Благодаря! – tjm

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