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


    之前看了很长时间的前端相关知识,怕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=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爬虫,它的里面包括处理验证码(我是真的很烦手动输入)链接地址

  • 相关阅读:
    发送带SMTP身份认证的电子邮件
    将class文件打包成可执行文件
    迈入本本一族
    关于Java的一些 工具,类库,框架......
    Java中用Servlet容器实现程序监听
    用JDOM读写XML
    Firefox丰富多彩的插件
    DIV居中——不大不小的问题
    羽绒外套
    pku1469 COURSES
  • 原文地址:https://www.cnblogs.com/fuzzier/p/6443283.html
Copyright © 2020-2023  润新知