python 爬虫——登录知乎

python 爬虫——登录知乎

说明

语言,版本,包:

pytho3.4
requests.get
request.post
requests.session

步骤:

1 通过浏览器f12开发者工具,找到登录时提交的表单以及请求的url

python 爬虫——登录知乎_第1张图片
注意请求的url不是浏览器域名框的url
因为知乎改了,现在不需要验证码了,所以图片中少了验证码的参数,不过代码里是有的

2 设计到登录等会跳转的页面,推荐使用火狐浏览器,然后打开持续日志功能

3具体实现见代码

代码:

__author__ = 'Guo'
# coding:utf-8

import requests
from bs4 import BeautifulSoup

# 解决编码问题
try:
    from io import BytesIO as StringIO
except ImportError:
    try:
        from cStringIO import StringIO
    except ImportError:
        from io import StringIO


def login():
    header = {
        'Host':"www.zhihu.com",
        'User-Agent':"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0",
        'Accept':"*/*",
        'Accept-Language':"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
        'Accept-Encoding':"gzip, deflate",
        'Content-Type':"application/x-www-form-urlencoded; charset=UTF-8"
    }

    session = requests.session() # 处理cookie

    res = session.get('http://www.zhihu.com/captcha.gif',headers = header)  # seesionh会记下访问验证码的cookie
    with open('captcha.jpg', 'wb') as fp:
        fp.write(res.content)     # 讲验证码图片保存在本地。
    # print(res.content)
    #print(res.cookies)
    # cook = res.cookies
    capt = input('input captcha')  # 手动读取
    xsrf = BeautifulSoup(session.get('http://www.zhihu.com/#signin').content).find('input', attrs={'name': '_xsrf'})['value'] # 从源码中获取的表单中的一个字段
    print(xsrf)
    data = {
        '_xsrf': xsrf,
        'email': '*******@gmail.com',
        'password': '*******',
        'remember_me': 'true',
        'captcha': capt
    }

    response = session.post('http://www.zhihu.com/login/email',data = data,headers = header ) # post 登录时提交的表单,此时session中是保存了此时的cookie 的

    print(response.status_code)
    print(response.content.decode('utf-8'))
    html = session.get('http://www.zhihu.com/#signi') # 再次访问,由于cookie 的存在,记下了登录的状态,所以此时就可以获取我们登录之后的类容了啦。

    print(html.content.decode('utf-8'))


if __name__ == '__main__':
    login()

你可能感兴趣的:(python爬虫)