说说各样不作不死的App产品设计

解析登入进程

这几天钻探百度登六和贴吧签到,那百度果然是网络巨头,叁个报到进度都弄得复杂无比,几乎有害。俺商讨了少数天依旧没搞领会。所以依旧先挑二个软红柿捏捏,就分选CSDN了。

经过异常的粗略,笔者也不截图了。直接展开浏览器,然后张开Fiddler,然后登6CSDN。然后Fiddler展现浏览器向https://passport.csdn.net/account/login?ref=toolbar出殡了二个POST请求,这么些请求包罗了登入表单,而且依然未加密的。当然CSDN本人依旧接纳了HTTPS,所以安全性还不错。

请求体如下,username和password当然是用户名和密码了。

username=XXXXX&password=XXXXXX&rememberMe=true&lt=LT-461600-wEKpWAqbfZoULXmFmDIulKPbL44hAu&execution=e4s1&_eventId=submit

lt参数笔者不知道是干啥的,结果一向在页面中1看原来全在表单里头,那下直接全了。CSDN很贴心的连注释都交给了。此外假若你张开百度首页的话,还会发觉浏览器的log中还会输出百度的招贤纳士音信。

HTML截图

一.画蛇添足性产品

登入代码

这个音讯全有了,那样大家就足以登6了。不说废话,直接上代码。先说说自家遇上的多少个坑。

率先是一个参数错误,其实逻辑没难点,不过代码笔者复制粘贴之后忘了改名字了,就登陆表单那里,八个参数全弄成了lt,结果登六重临来的页面是大错特错页面。笔者还以为是未曾附带什么请求头,瞎整了大半天。最终用Fiddler调试了多数遍才发现。

其次个难点正是CSDN鸡贼的跳转。由于浏览器自带了JS引擎,所以大家在浏览器中输入网站,达到页面那一进度不自然正是三个呼吁。大概在那之中用了什么样JS代码先跳转到中间页面,末了才跳转到实际页面。代码里的_validate_redirect_url(self)函数正是干这一个的,登入完了第贰次呼吁会得到四在那之中等页面,它涵盖了一群JS代码,个中有个重定向网站。大家获得到那一个重定向网站,还得请求二次,得到200OK后头,后续请求本事获取实际页面。

其八个难点正是正则表明式相配页面包车型客车空格难点了。获取小说首先得领悟小说总数,这一个好办,直接拿走页面里的篇章数就行了。它相仿100条 共20页本条。那么该怎么获取呢?1开始我用的(\d+)条 共(\d+)页本条正则,然而结果没相称到,然后自身仔细看了一晃页面,原来那四个词之间不是多个空格,而是八个空格!其实那几个难点倒是能够办,改一下正则(\d+)条\s*共(\d+)页就行了。所以事后只要境遇空格难点,直接用\s极度,不要想着本身输入三个空格依旧两个空格。

import requests
from bs4 import BeautifulSoup
import re
import urllib.parse as parse


class CsdnHelper:
    """登录CSDN和列出所有文章的类"""
    csdn_login_url = 'https://passport.csdn.net/account/login?ref=toolbar'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
    }
    blog_url = 'http://write.blog.csdn.net/postlist/'

    def __init__(self):
        self._session = requests.session()
        self._session.headers = CsdnHelper.headers

    def login(self, username, password):
        '''登录主函数'''
        form_data = self._prepare_login_form_data(username, password)
        response = self._session.post(CsdnHelper.csdn_login_url, data=form_data)
        if 'UserNick' in response.cookies:
            nick = response.cookies['UserNick']
            print(parse.unquote(nick))
        else:
            raise Exception('登录失败')

    def _prepare_login_form_data(self, username, password):
        '''从页面获取参数,准备提交表单'''
        response = self._session.get(CsdnHelper.csdn_login_url)
        login_page = BeautifulSoup(response.text, 'lxml')
        login_form = login_page.find('form', id='fm1')

        lt = login_form.find('input', attrs={'name': 'lt'})['value']
        execution = login_form.find('input', attrs={'name': 'execution'})['value']
        eventId = login_form.find('input', attrs={'name': '_eventId'})['value']
        form = {
            'username': username,
            'password': password,
            'lt': lt,
            'execution': execution,
            '_eventId': eventId
        }

        return form

    def _get_blog_count(self):
        '''获取文章数和页数'''
        self._validate_redirect_url()
        response = self._session.get(CsdnHelper.blog_url)
        blog_page = BeautifulSoup(response.text, 'lxml')
        span = blog_page.find('div', class_='page_nav').span
        print(span.string)
        pattern = re.compile(r'(\d+)条\s*共(\d+)页')
        result = pattern.findall(span.string)
        blog_count = int(result[0][0])
        page_count = int(result[0][1])
        return (blog_count, page_count)

    def _validate_redirect_url(self):
        '''验证重定向网页'''
        response = self._session.get(CsdnHelper.blog_url)
        redirect_url = re.findall(r'var redirect = "(\S+)";', response.text)[0]
        self._session.get(redirect_url)

    def print_blogs(self):
        '''输出文章信息'''
        blog_count, page_count = self._get_blog_count()
        for index in range(1, page_count + 1):
            url = f'http://write.blog.csdn.net/postlist/0/0/enabled/{index}'
            response = self._session.get(url)
            page = BeautifulSoup(response.text, 'lxml')
            links = page.find_all('a', href=re.compile(r'http://blog.csdn.net/u011054333/article/details/(\d+)'))
            print(f'----------第{index}页----------')
            for link in links:
                blog_name = link.string
                blog_url = link['href']
                print(f'文章名称:《{blog_name}》 文章链接:{blog_url}')


if __name__ == '__main__':
    csdn_helper = CsdnHelper()
    username = input("请输入用户名")
    password = input("请输入密码")
    csdn_helper.login(username, password)
    csdn_helper.print_blogs()

当然,那里最要紧的的正是登六进度了。大家登入之后,才足以做任何业务。比方说,下一步还能够写贰个备份工具,把CSDN博客的享有小说和图片下载到地面。风乐趣的同室可以试一试。

那种产品有个共性就是作用强大,分类精细,得到手,一般人学不会,要细心钻探壹番,因为效益太多,种种分类,各类标签,而且版本会定时更新,定时推出新职能,代表小说乐乎天涯论坛,从前一向利用天涯论坛的三.15版本,显得简洁清爽,后来今日头条再出新版,很少更新过,可是明天手贱就更新了下,手贱的来头根本是老版本速度太慢了,质量太差,所以想翻新个新版的希望速度快点,何人知道一更新,发现了许多的新功能,单独公布今日头条做成了八个“+”菜单,放在了荧屏最上边的高级中学级,点击后,出来一群分类,有文字,有图片,有录像,有记名,有点评,还有个越多,“更加多”里面还有伍个子项,多个颁发按键分类出10个子项,发博客园是个基础的供给,而且是基本要求,文字是最基础的,别的越来越多要求都是2类要求和三类须要,比如发图,未有先后鲜明,画蛇添足,那样的出品只会更让用户讨厌,而且很醒目抄袭微信,新浪是博客型产品的延长,却非要学微信IM型产品,使用起来12分的别扭。

二.让用户消除产品型

这种产品一个最大的表现是让用户化解难点,用户遭逢标题了,1般会问用户你使用的机型、时间、使用截图、还有系统版本,用户遇到的难点,错误提示等等,问一长串的正儿八经难题,把用户当我们了,产品出个难点,产品经营都不领悟,不是友好运行的失利么。好的运维和制品会积极搜聚互连网用户的种种主题素材和产品的各样难点,主动化解App产品的标题。

再有便是用户问难题,让用户看表达和FAQ的,用个你的制品,还要看表明,有的表明书长达几十项,找个难题要找半天,有时候找不到还要用寻找效果,结果不少协调开辟的站内找寻很差,半天根本搜索不到任张爱华西,表明书是最反人类的产品设计,假使3个出品供给用户同盟表达书才能造成,那么它便是一款未果的出品,对于小白型用户,必要不强的,他们会连忙卸载。

三.阴险性的产品设计

还有1种产品设计,是干嘛的,纯粹是套取用户新闻的,在用户注册的时候N多少个采纳项,要填邮箱、手提式有线话机、地区等等种种采取项,许多或然必填项目,就差把银行账户和密码给填上了 ,繁多时候,用户使用一款产品恐怕是因为口碑介绍或然看到了有些广告,来体验下,结果,在注册页面让用户填写伍条以上的新闻,用户很或者认为厌烦而废弃使用。代表文章正是此前的京东红包,只从微信红包火了今后,繁多App效仿微信红包,微信红包的目标是给大家发红包,然则无数其余的红包活动正是骗取资料和充实用户消费的目标,为啥如此说,就是送给用户20元红包,用户必须买钦赐的物品,这些确定是个骗局,提价赚用户十0元,再送用户20元的红包,如此下来依然赚钱的,那种阴险的位移类型的产品设计建议产品经营们不要做了,未来互连网音信这么发达,很轻巧就精通你的价格,使用比价网址1比就清楚了。曾经看到过京东、拍拍平常做这么的仿真活动,后来用比价网址查询之后,发现不是实在的优惠。那样的产品设计不是为着用户,不是互连网思维,明显是KPI的下压力至非常的大,而出的运动设计,而不是为了用户,不是为了产品设计。

肆.抢钱性产品设计

当今App相当的火,有广大App都想挣钱,刚安装上,还从未玩几步就起来收钱了,比如一次下个交友软件,刚把资料填写完毕,忽然有人发了个消息,结果要点击看,将在充值购买小红花,1朵一元钱,要6朵,这几个料定是太缺钱了,用户还未有把壹款产品体验截止,就起来弹窗、关卡拦着您收钱,那样的App只会是越做越小,做非常长。这样的软件好多特地是游戏类、交友类,许多交友类的App都是假用户,从互联网上找N多假照片,忽悠用户掏钱。

实际上,真正的产品设计越多角度是站在用户的角度去思虑难题,让用户来调控产品,然而具体中往往是众多产品首席营业官站在本身的角度依然CEO的角度记挂难点,那样对成品干预严重的点子到最后的路都走非常长,有句话叫执意栽花花不开,无意插柳柳成阴,当真正的小心用户角度思索难题的时候,大概会吸收意外的功效。

作者:移动网络李建华微信:tianyi86玖一三 注脚,任何媒体转载本作品须保留小编个人,字和微功率信号,来源,否则将以侵略作品权向您追责。