python网络爬虫入门(二)———模拟登陆知乎

上次我写了第一个网络爬虫是抓取的天气状况,这次来尝试一下登录。

首先,像之前一样,取得header的信息。

和之前的例子不同,登录需要向服务器发送一些信息,如账号、密码等。
同样,可以使用chrome的开发者工具 在network里勾选Preseve log。
然后手动执行一次登录的过程,找到一个叫email的网络请求,在header的底部有data所包含的字段,为 _xsrf,password,remember_me和 email。其中_xsrf字段可从登录页面的源码中获取。
这次,我们要创建一个session来保存相关信息和记住登录状态。

代码如下:

# -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup

def login():
    header = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Encoding':  'gzip, deflate, sdch',
        'Accept-Language':  'zh-CN,zh;q=0.8',
        'Cache-Control':  'max-age=0',
        'Connection':  'keep-alive',
        'User-Agent':  'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235'
    }
    session = requests.session()
    res = session.get('http://www.zhihu.com',headers = header).content
    _xsrf = BeautifulSoup(res, "html.parser").find('input', attrs={'name': '_xsrf'})['value']

    login_data = {
        '_xsrf':_xsrf,
        'password':'xxxx',
        'remember_me':'true',
        'email':'xxxx'
    }
    session.post('https://www.zhihu.com/#signin',data = login_data,headers = header)
    res = session.get('http://www.zhihu.com')
    print(res.text)

if __name__ == '__main__':
    login()

2018-02-15更新
之前的代码是写于2016年3月,现在知乎已做较大改变,已不适用。

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值