使用Python登录ask.fm

时间:2014-08-04 21:51:16

标签: python http python-2.7 post login

我的朋友要求我为ask.fm编写一个抓取脚本,并认为这很简单,但我还没有能够找出登录过程。我发现了很多关于使用python登录的帖子,但是没有成功调整代码。

根据Chrome开发者控制台,普通浏览器登录的POST仅提供authenticity_token,login(用户名),密码和提交("登录")作为表单数据。

import requests  
import cookielib
from urllib2 import build_opener, HTTPCookieProcessor, HTTPHandler, Request
from bs4 import BeautifulSoup

#do a GET to the login page and get the authentication token
loginGet = requests.get('http://ask.fm/login/')
data = loginGet.text
soup = BeautifulSoup(data)
inputs = soup.find('input', {'name':"authenticity_token"})
authToken = inputs['value']

#find default values of form fields (<input> elements below #login_form element
cookies = cookielib.CookieJar()
opener = build_opener(HTTPCookieProcessor(cookies), HTTPHandler())
req = Request("http://www.ask.fm/login/")
f = opener.open(req)

for cookie in cookies:
    if cookie.name == "_ask.fm_session":
        sessionCookie = cookie.value

#add default values to email and password data
form_data = {'authenticity_token' : authToken,
             'login'              : USERNAME,
             'password'           : PASSWORD,
             'commit'             : 'Log in' }

headers =     {'Accept':"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
       'Accept-Encoding' : 'gzip,deflate,sdch',
       'Accept-Language' : 'en-US,en;q=0.8,de;q=0.6',
       'Cache-Control'   : 'max-age=0',
       'Connection'      : 'keep-alive',
       'Content-Length'  : '115',
       'Host'            : 'ask.fm',
       'Origin'          : 'http://ask.fm',
       'Referer'         : 'http://ask.fm/login',
       'User-Agent'      : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36' }


#send login using Requests Session
url = 'http://ask.fm/login/'
cookies = {"_ask.fm_session" : sessionCookie}
s = requests.Session()
r = s.post(url, data=form_data, cookies=cookies, headers=headers)

wall = s.get("http://ask.fm/account/wall", headers=headers, timeout=10)
print wall.content

当我执行代码时,最后的get总是超时。看起来r.content(来自post()行)与ask.fm主页具有相同的HTML,而不是成功登录重定向到的页面。

1 个答案:

答案 0 :(得分:2)

我可以知道为什么您的内容长度始终相同吗?您还应该注意发送的表单数据,发送到服务器的表单数据不是列表,可能类似

    authenticity_token=123&username=toto&password=toto&...

尝试这样的事情让我知道