我用已经登录成功的cookie去获取同程其它页面获取不了
1 import re 2 import requests 3 import http.cookiejar 4 from PIL import Image 5 import time 6 import json 7 import urllib 8 9 headers ={'Content-Type':'application/x-www-form-urlencoded', 10 'Host': 'm.ly.com', 11 'Referer': 'https://m.ly.com/passport/login.html?returnUrl=%2fmember%2f', 12 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36' 13 } 14 # 建立一个会话,可以把同一用户的不同请求联系起来;直到会话结束都会自动处理cookies 15 session = requests.Session() 16 # 建立LWPCookieJar实例,可以存Set-Cookie3类型的文件。 17 # 而MozillaCookieJar类是存为'/.txt'格式的文件 18 session.cookies = http.cookiejar.LWPCookieJar("cookieTC") 19 # 若本地有cookie则不用再post数据了 20 try: 21 session.cookies.load(ignore_discard=True) 22 except IOError: 23 print('Cookie未加载!') 24 25 #登录 26 def login(mobilecode, yzm): 27 #输入自己的账号密码,模拟登录同程 28 url = 'https://m.ly.com/passport/login.html?returnUrl=%2fmember%2f' 29 data = {'mobile1':mobilecode, 30 'validCode':yzm, 31 '__RequestVerificationToken':'hZ/SKgQlyt8vwucimmrSE/v0+s122CUtmW7YcU9jfQfwdlgrBIgvq2HOMb58/QRv9inkXvpT5K0nHHVEK15BTtdn7xhzuZFiniRGyKwYLukQdnDj8uNEvjLO29mT19PgC0YABQ==', 32 'returnUrl':'/member/', 33 'mobile':mobilecode, 34 'action':'2' 35 } 36 37 # 验证码直接登录 38 result = session.post(url,data,headers=headers) 39 # 打印返回的响应,r = 1代表响应失败,msg里是失败的原因 40 # loads可以反序列化内置数据类型,而load可以从文件读取 41 if (result.status_code==200): 42 print('登录成功!') 43 # 保存cookie到本地 44 #session.cookies='NewProvinceId=25; NCid=321; 17uCNRefId=RefId=6928722&SEFrom=baidu&SEKeyWords=; TicketSEInfo=RefId=6928722&SEFrom=baidu&SEKeyWords=; CNSEInfo=RefId=6928722&tcbdkeyid=&SEFrom=baidu&SEKeyWords=&RefUrl=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D67G4miqOtaoF97NtX5uN2RzagsAweQ6N0ce3W4UspX3%26wd%3D%26eqid%3Dde89f82300021e66000000045a4aff5f; ASP.NET_SessionId=0nzduagmnmpafxocsujy4jh2; nus=userid=213466735&nickName=%e5%90%8c%e7%a8%8b%e4%bc%9a%e5%91%98_5ACD74728FC&level=1; usLoginType=1; Hm_lvt_64941895c0a12a3bdeb5b07863a52466=1513845651,1514864489; Hm_lpvt_64941895c0a12a3bdeb5b07863a52466=1514865100; qdid=39264|1|6928722|0a6c16; cnUser=token=&nickName=&loginType=; us=userid=&nickName=&level=; token=; loginRecord=name=&pass=; passport_login_state=pageurl=https%3a%2f%2fmember.ly.com%2forder; Identifier=w_l_s=d3cf095561cd4af1bba8bd143754af64&a_l_s=d45a87fe49ef4d29a938472d8cf1853c&ssid=0nzduagmnmpafxocsujy4jh2; _dx_uzZo5y=mk8m0xSsfkJyXBEhm60t3W7U5ZX7Vwg; __tctmc=144323752.196439725; __tctmd=144323752.258115222; __tctma=144323752.1513845659711168.1513845659008.1514864487867.1514872492280.5; __tctmb=144323752.113205166748855.1514872492280.1514872494674.2; __tctmu=144323752.0.0; __tctmz=144323752.1514864487867.4.1.utmccn=(organic)|utmcmd=organic|utmEsl=gb2312|utmcsr=baidu|utmctr=; longKey=1513845659711168; __tctrack=0; Hm_lvt_c6a93e2a75a5b1ef9fb5d4553a2226e5=1513845666,1514864498; Hm_lpvt_c6a93e2a75a5b1ef9fb5d4553a2226e5=1514872496; route=1aebb3c4227d40c9df356a037f3f28ca; td_sid=MTUxNDg3MjUwNywzNzM5ODVmYjU3NzkxYjE2MjFmMDE3NzQwOGQ3MWIzMTAxNDEyYjJkYTUwMWQ5NzE2OTE1MGYyZmI0Yzc1YjZlLDM1ODMxMTA5YjQ5MmEwNzFkOTgyMWFmZWFhMjVhYmFlMDIwN2FmMWFmYWFiY2JiZGY3OTlmNjI1ZWFkY2M1Mjg=; k_st=101.81.69.135|1514872507; td_did=Kn5A1OHzKaGHD4TPDkzIRP2PnD5xxruSKSLS1kf8OYoEChDx4GHi6DvxiBa1fWP%2B34lXhWuQjVB2ce7evb1RKpgDWhxlevhmmQWUAb8JksGmuYG4GlbpSxlBBPBAddPT68dUpKKFN0eoUzcPC6PQkHr2YybgNawRgrl7JNR0NnnspPIglG1ZtjzysjEiDKqaimzEreflInSjBGiaTThygg%3D%3D; t_q=1514872507855' 45 session.cookies.save(ignore_discard=True, ignore_expires=True) 46 47 #验证登录 48 def isLogin(mobilecode,yzm): 49 data = {'action': 'MobileLogin', 50 'name': mobilecode, 51 'mobilecode': yzm, 52 'v': '0.953055684627679' 53 } 54 # 通过查看用户个人信息来判断是否已经登录 55 url = "https://member.ly.com/order" 56 # 禁止重定向,否则登录失败重定向到首页也是响应200 57 login_code = session.post(url, data=data,headers=headers,allow_redirects=False).status_code 58 if login_code == 200: 59 return True 60 else: 61 return False 62 63 64 #爬取我的订单 65 def open_url(mobilecode,yzm): 66 data = {'action': 'MobileLogin', 67 'name': mobilecode, 68 'mobilecode': yzm, 69 'v': '0.953055684627679' 70 } 71 goodsURL = 'https://member.ly.com/order' 72 content = session.post(goodsURL,data=data,headers=headers).text 73 return content.text 74 75 if __name__ == '__main__': 76 mobilecode = input('请输入手机号:') 77 yzm = input('请输入验证码:') 78 if isLogin(mobilecode,yzm): #验证登录 79 print('登录成功') 80 print(open_url(mobilecode,yzm)) #爬取订单 81 82 else: 83 login(mobilecode, yzm) #登录同程
这种事情只能是慢慢检查,不要以为得到一个cookie就ok了,可能有更多的cookie或者其他参数。
关于怎么检查:直接的方式是网页先到达你需要爬的页面,把请求拿出来分析对比,看看缺哪些参数(不一定就是cookie)。
粗略看了一下你的code,同城居然没验证码? —— 如果有,验证码的流程通常如下,先到某uri Get,获取cookie(session),然后使用该cookie 去下一个uri 取验证码(图片),然后图像识别,然后才是post 登录。如果是大规模登录还要注意策略...
我是选择手机验证码登录的,登录成功后保存成功cookie,再用cookie(session.post)去获取订单页面,可问题就是获取不到
关键问题不是登录,是cookie能不能用.
你直接复制网页上的cookie可以访问到订单页面吗?你复制的cookie和你登录保存下来的参数一样吗?
考虑这些问题