python 爬蟲——登入知乎

_Goomy發表於2016-01-28

python 爬蟲——登入知乎

說明

語言,版本,包:

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

步驟:

1 通過瀏覽器f12開發者工具,找到登入時提交的表單以及請求的url

這裡寫圖片描述
注意請求的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()

相關文章