首页 > 代码库 > 模拟登陆国内著名知识交流网站

模拟登陆国内著名知识交流网站

之前看了很长时间的前端相关知识,怕python手生,写个模拟登陆恢复一下

zhihu网上的info有些是需要登陆后才能访问爬去的,所以不妨试一试

1 首先自己登陆,然后用fiddler进行抓包

发现登陆zhihu需要post以下data:

技术分享

A?, 验证码哪去了,算了,没有更好。

下面就要编写代码了,稍等,先看一下zhihu的response

技术分享

技术分享

resp的类型是json格式,经过检查,msg的值就是我们的登录状态了,所以一会我们会打印出这个值证明是否登录。

2 下面就不多说了,直接上代码

#!/usr/bin/python
# -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup
import cookielib
import json

HomePage = https://www.zXXXu.com/ # 主页网址
# = r‘zhihu_cookies.txt‘

session = requests.session()

cookie = cookielib.CookieJar()  #这个方法可以暂存cookie
‘‘‘
session.cookies = cookielib.MozillaCookieJar(filename)  #这个方法是将cookie放入文件中
try:
    session.cookies.load(filename=filename, ignore_discard=True, ignore_expirex=True)  #gnore_discard的意思是即使cookies将被丢弃也将它保存下来,ignore_expires的意思是如果在该文件中cookies已经存在,则覆盖原文件写入,
except:
    print ‘Cookie can not load!‘
‘‘‘

headers = {Connection: keep-alive,
            Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8,
            Accept-Language: en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3,
            User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36,
            Accept-Encoding: gzip, deflate, sdch,
            Host: www.zXXXu.com,
           }



def get_xsrf():
    text = session.get(HomePage, headers=headers).text
    soup = BeautifulSoup(text, html.parser)
    result = soup.find(div, class_=view view-signin).find(input)[value]
    return result


#获取验证码
def get_captcha():
    pass


def login_zhihu(phone, passwd):
    login_url = HomePage+/login/phone_num
    data = {
        _xsrf: %s % get_xsrf(),
        password: passwd,
        phone_num: phone,
        captcha_type: cn
    }
    result = session.post(login_url, data=http://www.mamicode.com/data, headers=headers)
    print json.loads(result.text)[msg]  # result的body是son格式,而‘msg‘的值是登录状态
    return


if __name__ == __main__:
    phone = raw_input(Please input phone_num: )
    passwd = raw_input(Please input password: )
    url = HomePage + /settings/profile   # 登录后才可以访问自己的profile
    login_zhihu(phone, passwd)
    resp_status = session.get(url, headers=headers, allow_redirects=False).status_code  # 此处关闭了跳转的操作
    print resp_status  # 返回结果是访问状态码

里面有两点需要说明

2.1 cookie的处理,我用了一个cookiejar存储了cookie,大家这步也可以忽略。

2.2 headers一定要写全,之前改个UA就能登录了,现在需要都写上才可以,zhihu也是反爬上挣扎(我可是在这里辛辛苦苦试了很多遍才察觉出来,大家不要像我这么傻)

 

3 最后就是返回的结果了

技术分享

 

最后最后给大家推荐一个jianshu的作者写的zhihu爬虫,它的里面包括处理验证码(我是真的很烦手动输入)链接地址

模拟登陆国内著名知识交流网站