python - 淘宝模拟登陆抓取失败
巴扎黑
巴扎黑 2017-04-17 17:32:45
0
2
903

淘宝模拟登陆抓取失败

# __author__ = ''
# -*- coding: utf-8 -*-
import requests
import re
s = requests.session()
login_data = {'email': 'xxx', 'password': 'xxx', }
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
           'Host':'log.mmstat.com',
            'Referer':'https://www.taobao.com/'
           }

# post 数据实现登录
s.post('https://login.taobao.com/member/login.jhtml?redirectURL=https%3A%2F%2Fwww.taobao.com%2F', login_data, headers=headers)
# 验证是否登陆成功,抓取'淘宝'首页看看内容
r = s.get('https://www.taobao.com')
print r.text

还是小白
用户名和密码省去嘞
得到的还是未登录时的代码,不知道自己少了什么,有成功的大神能告知一下咩

巴扎黑
巴扎黑

全部回复(2)
迷茫

注意在发送请求的时候附上cookie~
建议在模拟登陆的时候注意下面几点:
自己在浏览器看一下正常登录时发出去的请求:

  • 提交了哪些字段?

  • 带了哪些cookie?

  • 请求的地址是否有参数?

下面是我爬取云南大学图书馆借阅信息的爬虫。云大图书馆登录系统的默认密码是学号后八位。
那么它在提交表单的时候不只是用户名和密码,还有一个隐藏的lt字段,这个字段是生成登录表单的时候写在隐藏的input里面,所以必须提取;
在post表单的地址里面,还有一个jsessionid字段,这个也是要自己从登陆页面提取加上的;

总之,希望我的解决思路能给你一些引导。
反正见招拆招~

当你模拟的登录信息跟正常提交的信息服务器察觉不出异常的时候,就登陆成功咯~
所以,非常非常重要的一点--- 模仿正常的登录动作,在浏览器的network调试工具里不断琢磨吧。

下面附上我前一段时间写的模拟登陆爬虫

 #coding:utf-8
 #!/usr/bin/python 
  
import HTMLParser 
import urlparse 
import urllib 
import urllib2 
import cookielib 
import string 
import re
import sys
import time
reload(sys)
sys.setdefaultencoding('utf-8')

COOKIE_FLAG = True  # true使用这次cookie  false使用上次cookie

hosturl = "http://202.203.222.202/cas/login"
history = "http://202.203.222.202/myspace/reader/book/historyBorrow?pageSize=200&pageNo=1"

cj = cookielib.LWPCookieJar() 
cookie_support = urllib2.HTTPCookieProcessor(cj) 
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler) 
urllib2.install_opener(opener) 
#获取 lt
def getHTML(stdNum):
    cookie = cookielib.CookieJar()
    handler=urllib2.HTTPCookieProcessor(cookie)
    opener = urllib2.build_opener(handler)
    response = opener.open(hosturl)
    for item in cookie:
        if item.name == "JSESSIONID":
            jsessionId = item.value

    loginHTML = response.read()
    searchString = 'name="lt" value='
    try:
        index = loginHTML.index(searchString)
    except Exception as err:
        print "err:\t" + err
        return False
    lt = loginHTML[index +17:index +56]
    # print "lt:\t" + lt
    print "JD:   "+jsessionId
    targetPost = 'http://202.203.222.202/cas/login;jsessionid='+ jsessionId + '?service=http%3A%2F%2F202.203.222.202%2Fmyspace%2Freader%2Findex'
    headers = {
            'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1', 
            "Host": "202.203.222.202",
            "Origin": "http://202.203.222.202",
            "Referer": "http://202.203.222.202/cas/login?service=http://202.203.222.202/myspace/reader/index",
            "Upgrade-Insecure-Requests": 1,
          } 
    postData = {
            "username":stdNum,
            "password":stdNum[3:],
            "lt": lt,
            "execution": 'e1s1',
            "_eventId": "submit",
            "submit": "登录",
          }
    postData = urllib.urlencode(postData)
    request = urllib2.Request(targetPost, postData, headers)
    logResult =  urllib2.urlopen(request).read().decode("utf8")

    if "登录系统" in logResult:
        print "失败啦!"
        return "login failed "
    historyBorrowPage = urllib2.urlopen(history) 
    historyHTML = historyBorrowPage.read().decode('utf8')

    if "登录系统" in historyHTML:
        return False
    else:
        logout = "http://202.203.222.202/myspace/reader/logout"
        logoutYa = urllib2.Request(logout)
        logoutPage = urllib2.urlopen(logoutYa)
        return historyHTML
刘奇

话说为啥是淘宝的地址呢==直接用自己登陆的cookie就好了,知乎好像也还有验证码的

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板