知乎爬虫之模拟登录

爬虫简单的原理就是发送一个请求到网站的服务器,服务器进行响应,然后从服务器响应的内容解析出我们想要的数据
这里我们将用requests库来发送请求(Windows上面在控制台通过pip3 install requests 进行安装),
解析可以用beautifulsoup库(用 pip3 install beautifulsoup安装),不过在这里暂时用不到解析,
python版本是3

第一步 分析
使用chrome浏览器和火狐浏览器都可以,这里我将使用火狐浏览器进行示范。
首先打开知乎登录页面,同时按F12打开开发者工具:
这里写图片描述

然后我们在这里需要对浏览器进行一下设置,勾选启用缓存日志,不然登录的时候你会发现发送登录的请求链接刚开始一秒左右还能看见,加载一会后就消失了:这里写图片描述

好了,输入账号密码然后点击登录,神奇的一幕出现了:
这里写图片描述
这个phone_num文件就是我们想要找的,点击可以查看到请求的网址是https://www.zhihu.com/login/phone_num和请求头,请求头的信息将会被用到来构建我们代码中的请求头,然后我们再看看参数,这是我们发送请求是传给网站服务器的数据,待会也要用到,这里我就不点开参数了给大家展示了,因为这里有我自己的账号信息
登录成功会响应登录成功
好了,分析过程完了,我们开始写代码了

第二步 写代码

# -*- coding:utf-8 -*-
__author__="weikairen"

import  requests
from bs4 import  BeautifulSoup

URL='https://www.zhihu.com/login/phone_num'
User_Agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36X-Requested-With:XMLHttpRequest'
headers = {'user-agent': User_Agent}
data={
 '_xsrf':'a626e45048da76595564ec6607fa0c9c',
  'password':'*******',
  'remember_me':'true',
  'phone_num':'********'

}
#requests_session = requests.session()
#response = requests_session.post(url=URL, headers=headers,data=data)
# 这种和下面一行的方法是一样的,这使用session方法是因为可以保存cookie
# 这里你可以先知道有这么个用法
response=requests.post(url=URL, headers=headers,data=data)
print(response.json()['msg'])

好了,运行程序你就会在控制台看见登录成功的字样。
不过有时候你过于频繁的登录,知乎就会让你输入验证码,验证码怎么搞呢?不用怕,还是箱上面那样在浏览器开发者工具里面找验证码文件,然后查看它的请求URL,这个URL是以时间戳来构造的,我昨天还要输入验证码,今天又不用输入了,所以这里我就不再截图分析了,参考下面的代码

# -*- coding:utf-8 -*-
__author__="weikairen"

import  requests
from bs4 import  BeautifulSoup
import  time

BASE_URL='https://www.zhihu.com/'
LOGIN_URL=BASE_URL+'login/phone_num'
CAPTCHA_URL=BASE_URL+'captcha.gif?r='+str(int(time.time())*1000)+'&type=login'


def login():
    headers={
        'host':'www.zhihu.com',
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0',
        'referer':"https://www.zhihu.com/",
        'X - Requested - With': "XMLHttpRequest"
    }                                                 #构造请求头,讲它伪装成为浏览器
    captcha_content=requests.get(CAPTCHA_URL,headers=headers).content
    with open('C:\cap.gif','wb') as cap:       #将验证码图片下载下来存储到C盘的根目录下面
        cap.write(captcha_content)
    captcha=input('请输入验证码: ')
    data={
        '_xsrf': "94b6a3f4ba711971716bd8b863d9c91c",
        'password': "********",
        'captcha_type': "cn",
        'remember_me': "true",
        'phone_num': "********"
    }
    session = requests.session()                                      #这里使用了session方法是因为可以自动保存cookie在session中
    response=session.post(LOGIN_URL,data=data,headers=headers)
    print(response.json()['msg'])

login()


然后控制台会打印登录成功,模拟登录就完成啦。。

每天一小步。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值