爬虫案例:登录V2EX

踩点

V2EX是挺有意思的一个网站,,,脑补连接
登陆时,它的请求不是通过 Ajax 请求,而是通form 表单,因为在点击登录时,整个页面都会加载,而不是像 Ajax一样,偷偷的就给你搞出来了。。。。
在这里插入图片描述
我们输入的账号,密码,验证码的 key 都是由一堆乱七八糟的数据指向的,而且每次这串数据都不一样,所以我们需要找到这些数据是怎么生成的

然后我们在网页源代码中账号密码对应的input 标签发现,name 属性就是上面这乱七八糟的数据。。所以只要我们获取了这个属性,就知道账号,密码的 key 值。

  • 账号,密码的key 值都是随机的,我们先拿到网页源代码,解析出里面的key 值
  • 再调用登录的接口,提交数据
  • 使用云打码解决验证码

实战

import requests
from lxml import etree
from yundama import YDMHttp


headers = {
'referer': 'https://www.v2ex.com/signin',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
}


def login():
    url = 'https://www.v2ex.com/signin'
    session = requests.Session()  # 自动保存cookie
    resp = session.get(url,headers=headers)
    text = resp.text
    html = etree.HTML(text)
    inputs = html.xpath('//form[@action="/signin"]//input/@name')
    name = inputs[0]
    password = inputs[1]
    captcha = inputs[2]
    once = html.xpath('//form[@action="/signin"]//input/@value')[3]


    captcha_url = 'https://www.v2ex.com/_captcha?once=' + once
    image = session.get(captcha_url,headers=headers)
    with open('captcha.png','wb') as f:
        f.write(image.content)

    ydm = YDMHttp(username='账号',password='密码')
    uid = ydm.login()
    if not uid:
        print('登录失败')

    balance = ydm.balance()
    if balance < 10:
        print('余额不足')

    result = ydm.decode(filename=r'captcha.png',codetype='3007')

    data = {     # 构建表单
        name:'账号',
        password:'密码',
        captcha: result,
        "once":once,
        'next':'/'
    }
    return data

def get_data(data):
    url = 'https://www.v2ex.com/member/moden' # 访问个人网页
    session = requests.Session()
    session.post(url,data=data,headers=headers)
    resp = session.get(url,headers=headers)
    print(resp.text)


if __name__ == '__main__':
    data = login()
    get_data(data)

还行,,在失败九次后终于登上了,,,,,,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值