关于豆瓣登录金沙官网线上,并实现验证码输入

最近想把模拟登录的知识学习下,所以就进行了豆瓣账号的简单登录,以下是代码:

前面爬虫课程七、八、九、十,我把爬虫豆瓣读书的爬虫讲解完毕啦,我们很顺利地爬取了豆瓣读书书籍内容,爬取过程中也不需要用户登陆。

# -*- coding:utf-8 -*-
'''豆瓣模拟登陆,并实现发一条状态'''

import requests
session = requests.session()
header = {"Host": "www.douban.com",
            "Referer": "https://www.douban.com/",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0"
        }
def login():
    print("====start====")
    username = input("please input your 账号:")
    password = input("please input your 密码:")
    payload = {
        "captcha-id": "",
        "captcha-solution":"",
        "form_email":username,
        "form_password":password,
        "source": "index_nav",
        "user_login": "登录"
    }
    # 通过验证码的获取得到验证码的图片和id
    rc = requests.get("https://www.douban.com/j/misc/captcha", headers=header)
    captchaUrl = rc.json()['url']
    captchaid = rc.json()['token']
    ri = requests.get("https:"+captchaUrl, headers=header)
    with open('captcha.jpg', "wb") as fc:
        fc.write(ri.content)
    payload["captcha-id"] = captchaid
    payload["captcha-solution"] = input("please input captcha code:")
    # 通过用户名密码登录豆瓣账号,并检查返回的html中是否有账号名称,如果有则说明成功了
    rl = session.post("https://accounts.douban.com/login", headers=header,data=payload)
    if "ven忘了" in rl.text:
        print("login in success!")
    else:
        print("login in failure!")
    # session保持登录状态,在首页实现发布状态。
    payload2 = {
        "ck": "oAEg",
        "comment":"今天的天气是真的好,万里无云,四季常青!"
    }
    rm = session.post("https://www.douban.com/", headers=header,data=payload2)
    print("success")
login()

然而,有些时候,我们要爬取某些信息时是需要我们在登陆的情况下才能获取到对应信息的,这个时候我们怎么样使用Scrapy进行模拟登陆呢?接下来的文章我将以爬取知乎问答内容为例来讲解如何使用Scrapy进行模拟登陆。

实现豆瓣的模拟登录,最关键的当然是要观察豆瓣账户是如何登录的,(在谷歌或者火狐浏览器中,实现一次登录,抓取登录时发送的包(是一个post的请求)),如下:

一、分析知乎登录的请求api

金沙官网线上 1

我们先进入知乎的登录页面,输入用户名和密码(为了查看登录时请求的api信息,我这里故意把密码输错),点击登录,查看右边Network信息。

我们需要把参数中的值加入到请求当中去,然后headers的设定必不可少,使用session可以保持登录的状态,以便下一步实现对个人主页上的操作。

金沙官网线上 2

注:实现的内容比较简单,但是我觉得比较重要。如有疑问请私信我,也请大神指点。

知乎登录

 

通过Network截取到使用email登录(见下图1)时的请求api为https://www.zhihu.com/login/email(见下图2),请求需要的From金沙官网线上, Data为_xsrf、password、captcha_type和email,其中captcha_type为固定值2,_xsrf是上一个页面动态获取的,email和password为登录邮箱和密码。

金沙官网线上 3

知乎登录需要的值

通过对知乎登录需要提交的From Data信息进行分析得知只有_xsrf这个参数的值是需要动态获取,并且是从上一个页面(https://www.zhihu.com/#signin)进行获取过来的,如果在登录时没有_xsrf值时登录请求会返回校验失败。

本文由金沙官网线上发布于编程,转载请注明出处:关于豆瓣登录金沙官网线上,并实现验证码输入

您可能还会对下面的文章感兴趣: