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月,现在知乎已做较大改变,已不适用。

你可能感兴趣的:(python)