Python爬虫闯关-3

版权声明:转载请注明! https://blog.csdn.net/linfeng886/article/details/82083578

第三关

第三关网址:http://www.heibanke.com/lesson/crawler_ex02

第三关相比第二关多了一个登陆的步骤,我们首先必须要登陆到他的网站,然后才能去猜密码

步骤

代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import requests
import re

class Login(object):
    def __init__(self):
        self.session = requests.Session()
        self.headers = {
            'Host': 'www.heibanke.com',
            'User-Agent': 'Mozilla/5.0 (iPad; CPU OS 12_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) CriOS/68.0.3440.83 Mobile/16A5345f Safari/604.1'
        }
        self.url_get = 'http://www.heibanke.com/lesson/crawler_ex02/'
        # 登陆请求的网址设为空,下面从请求中提取
        self.url_login = ''
        # 模拟登陆的data
        self.data_test = {
            'csrfmiddlewaretoken': '',
            'username': 'user',
            'password': ''
        }
        # 网站登陆所需要的data
        self.data_login = {
            'csrfmiddlewaretoken': '',
            'username': '你的账号',
            'password': '你的密码'
        }

    # 获取cookies
    def get_cookies(self):
        # 要完成这个题,首先需要登陆网站,假如你没登陆网站,那么访问这个网址的时候会跳转到登陆界面
        response = self.session.get(url=self.url_get, headers=self.headers)
        # 如果登陆网站的csf为空,也就是我们还没登陆,我们给csf赋值,然后返回登陆所请求的url
        if self.data_login['csrfmiddlewaretoken'] == '':
            self.data_login['csrfmiddlewaretoken'] = response.cookies['csrftoken']
            # 已经跳转到登陆界面了,我们把登陆url提取出来
            return response.url
        # 如果登陆网站的csf有值了,那么就是说我们已经登陆了,现在我们给模拟登陆的csf赋值
        self.data_test['csrfmiddlewaretoken'] = response.cookies['csrftoken']

    def login(self):
        response = self.session.post(
            url=self.url_login, headers=self.headers, data=self.data_login)
        # 若登陆成功,会重定向跳转到http://www.heibanke.com/lesson/crawler_ex02/
        print(response.url)
        if response.url == self.url_get:
            print('登陆成功!')
            return True
        else:
            print('账号密码错误!')
            return False

    # 请求界面
    def post_page(self):
        response = self.session.post(
            url=self.url_get, headers=self.headers, data=self.data_test)
        content = response.text
        text = re.findall('<h3>(.*?)</h3>', content, re.S)[0]
        print('用户名:', self.data_test['username'], '----密码: ', self.data_test['password'],
              '---csf:', self.data_test['csrfmiddlewaretoken'], '提示信息:', text)
        return text

    def login_test(self):
        # get_cookies()返回的是登陆所要请求的url
        self.url_login = str(self.get_cookies())
        if self.login():
            # 因为登陆成功了,所以重新设置cookies
            self.get_cookies()
            for x in range(31):
                self.data_test['password'] = str(x)
                text = self.post_page()
                if '成功' in text:
                    print('闯关成功!密码是:', x)
                    break
        else:
            return None

if __name__ == "__main__":
    login = Login()
    login.login_test()

结语:

源码: 点我

欢迎关注我的公众号 疯子的Python笔记

公众号二维码.jpg

猜你喜欢

转载自blog.csdn.net/linfeng886/article/details/82083578