爬取虾米音乐时,模拟登陆网页版地址https://login.xiami.com/member/login后,返回的是一串字符(包括status、jumpurl以及账号信息等),但无法获取跳转后的网页(http://www.xiami.com/);通过HttpFox发现:为了得到网页,必须发送登录时获取的cookie,于是添加cookie再进行爬取就可以了!奇怪的是,登陆手机版的网址不需要发送cookie就可以获取到,所以也想请教下原因。如果不采用登陆后再添加cookie的方法,如何直接获取到登陆跳转后的网页?
附录的代码:
#! /usr/bin/env python2.7
# encoding=utf-8
import re
import urllib,cookielib,urllib2
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
postdata = urllib.urlencode({
'email' : '(省略)',
'password' : '(省略)',
'submit' : '%E7%99%BB%E5%BD%95',
'_xiamitoken' : '(省略)',
'done' : 'https://www.xiami.com',
'from' : 'web',
'havanaId' : ''
})
postdata = postdata.encode('utf-8')
login_headers = {
'Referer' : 'https://www.xiami.com/',
'User-Agent' : 'Chrome/45.0.2454.101',
}
url = 'https://login.xiami.com/member/login'
req = urllib2.Request(url,postdata)
#result = opener.open(req)
result = urllib2.urlopen(req)
print result.read()
获取到的字符串:
{"status":true,"message":"success","data":{"user_id":"(省略)","nick_name":"(省略)"},"jumpurl":"https:\/\/www.xiami.com"}
模拟操作的时候,个人推荐使用requests库,可以自动提交cookie,免去手动操作的烦恼
手机可以不用cookie直接获取内容,感觉关键在于ua,有条件可以抓包看一下