Python学习——学习记录

表单登录

代码如下:

import time
import requests
from bs4 import BeautifulSoup

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36',
}
url = 'https://www.zhihu.com'


def kill_captcha(data):
    with open('1.gif', 'wb') as fp:
        fp.write(data)
    return input('captcha : ')


def login(username, password, kill_captcha):
    session = requests.session()
    _xsrf = session.get(url+'/#signin', headers=headers).cookies['_xsrf']
    captcha_content = session.get(url+'/captcha.gif?r=%d&type=login' % (time.time() * 1000), headers=headers).content

    data = {
        '_xsrf': _xsrf,
        'password': password,
        'captcha': kill_captcha(captcha_content),
        'email': username,
        'remember_me': 'true'
        # 字典的键值对顺序可以随机
    }

    resp = session.post(url+'/login/email', data=data, headers=headers).text
    # 登录成功
    assert r'\u767b\u5f55\u6210\u529f' in resp
    return session


if __name__ == '__main__':
    session = login(username, password, kill_captcha)
    page = session.get(url, headers=headers).text
    soup = BeautifulSoup(page, 'lxml').findAll('a', {'class': 'question_link'})
    for s in soup:
        print(s.get('href'))

模拟知乎表单登录,还需要手动输入验证码。用户登录的页面分为手机和email地址是不同的,这里演示的是email的登录,手机号登录post的url不同,其他没有区别,图片验证码的地址是一个时间戳.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,314评论 19 139
  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,293评论 22 257
  • 在上一个章节,我们已经创建了一个基础的Blog程序。现在我们将使用一些Dajngo高级功能,去实现一个完整的blo...
    金金刚狼阅读 8,950评论 1 12
  • “每天认真洗脸,多读书,按时睡,少食多餐。变得温柔,大度,继续善良,保持爱心。不在人前矫情,四处诉说以求宽慰,而是...
    c末阅读 1,254评论 0 0
  • 生命是一个经验的过程 我们要做的 就是享受生命 而不是改造生命 生命没有问题 不需要改造 更不需要折磨自己 谴责自...
    爱相续阅读 1,124评论 0 0