大写牛逼,用 Python 登录主流 24 个网站


大写牛逼,用 Python 登录主流 24 个网站_第1张图片

文章来源:GitHuboy

作者:Boy哥

爬虫脚本是大家经常用到的,那就避开不了登录 这一关。

使用Python一般需要request库,补充 header 中的 post 要素,有些还会有 隐藏的 hidden 参数,可以通过浏览器 F12 或者元素审查来发现,对于初学者来说都是一个坑。

还有需要解决验证码的问题,一种方法是下载验证码图片识别验证码再次post,或者使用云打码平台。当然,有些验证码及其变态就不那么容易解决了,比如选字顺序、滑块、12306那种人为都会选错的。

本篇boy哥分享一个GitHub项目awesome-python-login-model》,主要就是利用Python解决登录主流平台的,包含24个主流平台,目前在GitHub上已经表星11.8k了。

Github链接:https://github.com/Kr1s77/awesome-python-login-model

已完成的主流网站

大写牛逼,用 Python 登录主流 24 个网站_第2张图片

上面是作者已经完成的一些主流网站了,其中有的是通过 selenium登录,有的是通过 抓包直接模拟登录,有的是利用 scrapy框架。

这个很容易理解,因为有的网站设计比较复杂,通过抓包很难实现模拟登录,这样用 selenium+webdriver 就会相对轻松一些。

虽然在登录的时候采用的是selenium,为了效率,我们可以在登录过后得到的cookie维护起来,然后调用requests或者scrapy等进行数据采集,这样数据采集的速度可以得到保证。

模拟登录GitHub

这里boy哥给大家展示一个模拟登录GitHub的代码。

"""
github第二种登录方式
info:
author:CriseLYJ
github:https://github.com/CriseLYJ/
update_time:2019-3-7
"""

import re
import requests
from lxml import etree


class Login(object):
class GithubLogin(object):

    def __init__(self, email, password):

        # 初始化信息
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
            'Referer': 'https://github.com/',
            'Host': 'github.com'
        }

        self.session = requests.Session()
        self.login_url = 'https://github.com/login'
        self.post_url = 'https://github.com/session'
        self.session = requests.Session()

        self.email = email
        self.password = password
    # 模拟登录
    def login_GitHub(self):

        # 登录入口
        post_data = {
            'commit': 'Sign in',
            'utf8': '✓',
            'authenticity_token': self.get_token(),
            'login': self.email,
            'password': self.password
        }
        resp = self.session.post(
            self.post_url, data=post_data, headers=self.headers)

        print('StatusCode:', resp.status_code)
        if resp.status_code != 200:
            print('Login Fail')
        match = re.search(r'"user-login" content="(.*?)"', resp.text)
        user_name = match.group(1)
        print('UserName:', user_name)

        response = self.session.post(self.post_url, data=post_data, headers=self.headers)

        print(response.status_code)
        print(post_data)

        if response.status_code == 200:
            print("登录成功!")
        else:
            print("登录失败!")
    # 获取token信息
    # Get login token
    def get_token(self):

        response = self.session.get(self.login_url, headers=self.headers)

        html = etree.HTML(response.content.decode())

        token = html.xpath('//input[@name="authenticity_token"]/@value')[0]

        return token
        if response.status_code != 200:
            print('Get token fail')
            return None
        match = re.search(
            r'name="authenticity_token" value="(.*?)"', response.text)
        if not match:
            print('Get Token Fail')
            return None
        return match.group(1)

if __name__ == '__main__':
    email = input('请输入您的账号: ')
    password = input('请输入您的密码: ')
    email = input('Account:')
    password = input('Password:')

    login = Login(email, password)
    login = GithubLogin(email, password)
    login.login_GitHub()

相信这对初学爬虫的朋友是一个很好的教程。

但提示一下,模拟登录的代码随时都有可能失效,因为前端的网页HTML、CSS、JS等结构可能会根据公司业务调整之类的发生变化。

所以,重点是掌握了各种技巧,学会这些完全可以自己调试完成登录,那时候你也可以成为 contributor 了!

Github链接:https://github.com/Kr1s77/awesome-python-login-model

公众号文末改版了,如果觉得有帮助,还请多多支持,欢迎 分享、点赞、在看 三连。

- end -

每日留言

说说你用Python做过哪些有意思的事情?

或者新学的一个小技巧?

(字数不少于15字)

留言赠书

恭喜 凌云 获得昨日的留言赠书一本

联系老表微信:pythonbrief

大写牛逼,用 Python 登录主流 24 个网站_第3张图片

近期推荐阅读:
【1】整理了我开始分享学习笔记到现在超过250篇优质文章,涵盖数据分析、爬虫、机器学习等方面,别再说不知道该从哪开始,实战哪里找了【2】【终篇】Pandas中文官方文档:基础用法6(含1-5)
如果你觉得文章不错的话,分享、收藏、在看、留言666是对老表的最大支持。

你可能感兴趣的:(大写牛逼,用 Python 登录主流 24 个网站)