我正在尝试使用Python(2.7)自动登录Amazon Mechanical Turk并获取有关可用的一些HITS的信息。如果您尝试超过第20页,则需要登录,这是我遇到困难的地方。我试图向我们提供许多python包,包括mechanize,urllib2,最近我在stackoverflow here上使用请求找到了一个非常相关的解决方案。我添加了我的上下文所需的细微修改,见下文,但代码不起作用。响应页面再次是显示错误的登录页面:您的密码不正确。此外,原始帖子中的代码也不再适用于其上下文;显示相同的错误。所以我认为亚马逊已经改变了一些东西,我似乎无法弄清楚它是什么以及如何解决它。这条线上的任何帮助都将非常感激。
import bs4, requests
headers = {
'User-Agent': 'Chrome'
}
from bs4 import BeautifulSoup
url = "https://www.mturk.com/mturk/viewhits?searchWords=&pageNumber=21" \
"&searchSpec=HITGroupSearch%23T%232%23100%23-1%23T%23%21%23%21" \
"LastUpdatedTime%211%21%23%21&sortType=LastUpdatedTime%3A1" \
"&selectedSearchType=hitgroups"
with requests.Session() as s:
s.headers = headers
r = s.get(url)
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'] = ''
signin_data[u'password'] =''
for k,v in signin_data.iteritems():
print k + ": " + v
action = soup.find('form', id='ap_signin_form').get('action')
response = s.post(action, data=signin_data)
soup = bs4.BeautifulSoup(response.text, "html.parser")
warning = soup.find('div', {'id': 'message_error'})
if warning:
print('Failed to login: {0}'.format(warning.text))