前言

在爬取某些网页时,登陆界面时经常遇到的一个坎,而现在大多数的网站在登陆时都会要求用户填写验证码。当然,我们可以设计一套机器学习的算法去破解验证码,然而,验证码的形式多种多样,稍微变一下(有些甚至是手机短信验证),整套算法可能就完全无效了,所以去强行破解验证码是一个吃力不讨好的活。本文会以知乎网站为例,利用python中的request模块进行的一个模拟登陆,其中用到了reqeust.session下的cookies来跳过登陆这一环节。

方案详述

下面以模拟登陆知乎为例,利用python3.6进行详细的过程叙述,建议使用pycharm作为IDE。
首先,我们要将headers给设置好

agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"
headers = {"HOST": "www.zhihu.com","Referer": "http://www.zhihu.com","User-Agent": agent
}

接着,用账号成功登陆一次知乎,并按下“F12”(Chrome浏览器),找到Resources下的Cookies,将显示的Cookies全都复制下来,即下图红框中的”Name”和”Value”。


图1:如何找到Cookies
图中一些个人隐私信息已经擦去,图可能有点看不清,但应该能看明白,凑合一下吧~
将复制下来的Cookies写成字典的形式由于隐私问题,下面是不完整的Cookies。

cookies = {"cap_id" : "MWQ0Yzk4NGI1Y2M4NG*********","r_cap_id" : "OTUyOTY1YjFjMDQ5NGEx*********","z_c0" : "Mi4xWVduN0FRQUFB**********","q_c1" : "108429c2422245a0********","d_c0" : "ADBCEDC-5guPTr*********","aliyungf_tc" : "AQAAAAaQE*************","_zap" : "92146d2b-**********","_xsrf" : "01124268-4638-***************","__utmz" : "51854390.15038440***********","__utmv" : "51854390.000**************","__utma" : "51854390.4***********"
}

然后创建一个session对象,将headers和cookies赋给session

import Requestssession = Requests.session()
session.headers = headers
requests.utils.add_dict_to_cookiejar(session.cookies, cookies)

其中,值得注意的是,session.headers可以是dict,所以直接赋值没问题,而session.cookies必须是<class ‘requests.cookies.RequestsCookieJar’>,所以要利用requests.utils.add_dict_to_cookiejar进行赋值。
好了,现在我们已经完事具备了,可以直接访问知乎了,就是这么简单。

url = "https://www.zhihu.com/"
response = session.get(url)

比如这个时候,我们想把访问到的页面给保存下来,我们就可以这么干。

with open("test.html", "wb") as f:f.write(response.text.encode('utf-8'))

登陆进去了之后,就是想怎么来,就怎么来了~
这里还要补充一点就是,我们如果觉得把cookies写在源代码中不太雅观的话,可以将其保存到本地文件当中

import jsondef save_cookies(cookies):cookies_file = 'export.json'with open(cookies_file, 'w') as f:json.dump(cookies, f)

保存成Json格式之后,可以在cookies过期之后,直接在文件当中修改cookies,要读取cookies也很方便

def load_cookies():cookie_json = {}try:with open('export.json', 'r') as cookies_file:cookie_json = json.load(cookies_file)except:print ("Json load failed")finally:return cookie_json

值得注意的是,这个时候出来的cookies也是dict类型的,别忘了转换成cookiejar。

完整代码

我们可以把上面的代码整理一下,写成下面这样
文件1:用来存储cookies

import jsondef save_cookies(cookies):cookies_file = 'export.json'with open(cookies_file, 'w') as f:json.dump(cookies, f)def main():cookies = {"cap_id" : "MWQ0Yzk4NGI1Y2M4NG*********","r_cap_id" : "OTUyOTY1YjFjMDQ5NGEx*********","z_c0" : "Mi4xWVduN0FRQUFB**********","q_c1" : "108429c2422245a0********","d_c0" : "ADBCEDC-5guPTr*********","aliyungf_tc" : "AQAAAAaQE*************","_zap" : "92146d2b-**********","_xsrf" : "01124268-4638-***************","__utmz" : "51854390.15038440***********","__utmv" : "51854390.000**************","__utma" : "51854390.4***********"}save_cookies(cookies)if __name__ == '__main__':main()

文件2:用来模拟登陆

import requestsdef load_cookies():cookie_json = {}try:with open('export.json', 'r') as cookies_file:cookie_json = json.load(cookies_file)except:print ("Json load failed")finally:return cookie_jsondef main():agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"headers = {"HOST": "www.zhihu.com","Referer": "http://www.zhihu.com","User-Agent": agent}session = requests.session()session.headers = headersrequests.utils.add_dict_to_cookiejar(session.cookies, load_cookies())url = "https://www.zhihu.com/"response = session.get(url)with open("test.html", "wb") as f:f.write(response.text.encode('utf-8'))print ("Done")if __name__ == '__main__':main()

注意本文创作时间,如果阅读时已经过了很久,代码可能不起效。
如有不足,还请指正~

爬虫小记:利用cookies跳过登陆验证码相关推荐

  1. 利用cookies跳过登陆验证码

    前言 在爬取某些网页时,登陆界面时经常遇到的一个坎,而现在大多数的网站在登陆时都会要求用户填写验证码.当然,我们可以设计一套机器学习的算法去破解验证码,然而,验证码的形式多种多样,稍微变一下(有些甚至 ...

  2. 利用cookies+requests包登陆微博,使用xpath抓取目标用户的用户信息、微博以及对应评论...

    本文目的:介绍如何抓取微博内容,利用requests包+cookies实现登陆微博,lxml包的xpath语法解析网页,抓取目标内容. 所需python包:requests.lxml 皆使用pip安装 ...

  3. 爬虫如何利用session方法保持登陆状态(selenium)

    爬取网站页面时需要登录后才能访问,否则获取不到页面的实际响应数据 有些网站需要我们登陆才能获取访问数据,然而往往登陆页和所要爬取的数据不在同一页面,这里一般都会想到对cookies进行处理的方法,如下 ...

  4. 从爬虫构建数据集到CNN模型的验证码识别,一步一步搭建基于Python的PC个人端12306抢票程序

    写在前面:这个程序不是一个人能在短时间内完成的,感谢达纳,王哥的支持帮助.也感谢小平老师,没有压迫,就没有项目. 简介:这是一篇很硬核的Blog, 有一定Python基础的童鞋方能看懂,本程序的主要内 ...

  5. 通过cookies跳过验证码登陆页面,直接访问网站的其它URL

    我每次手动访问去NN网的一家酒店,就不需要登陆,一旦我用脚本打开就会让我登陆,而登陆页面又有验证码,不想识别验证码,所以就想:"通过cookies跳过验证码登陆页面,直接访问网站的其它URL ...

  6. selenium利用cookie跳过验证码登录

    1.测试场景 在实现web自动化的过程中,为了解决每次登录时,验证码会随机变化的问题,以达到测试已登录状态的其他页面模块,我们需要利用cookie跳过登录,完成测试. 正常情况下,项目测试人员是不会遇 ...

  7. 利用selenium+chrome模拟登陆合工大信息门户并进行自动填写测评

    最近学校要填写对于老师的评教,不填写的就无法进行下周的选课∑^)/ 我这么懒,自然不想一个一个点进去填写,想到最近在学爬虫,干脆写一个爬虫帮我弄算了 ╭~~~╮ (o~.~o) 首先打开我们学校的信息 ...

  8. 利用深度学习识别滑动验证码缺口位置

    做爬虫的同学肯定或多或少会为验证码苦恼过,在最初的时候,大部分验证码都是图形验证码.但是前几年「极验」验证码横空出世,行为验证码变得越来越流行,其中之一的形式便是滑块验证码. 滑块验证码是怎样的呢?如 ...

  9. tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片...

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...

最新文章

  1. 最新的SCI-HUB访问地址
  2. linux卸载keystone服务,关于linux下卸载apache后安装apache
  3. How many levels are there at the in the digital transformation?
  4. 怎样发量暴增_发量少怎么增加发量 秃发女孩必学发量激増6招
  5. Node.js 模块之Nimble流程控制
  6. python旋转矩阵_python – 来自两个3D点的Euler角度和旋转矩阵
  7. 关于“指针数组”和”数组指针“
  8. ZStack基本工作原理
  9. python输入半径计算球的体积公式_编写程序:根据输入的球的半径,分别计算球的表面积、体积输出计算结果。...
  10. LR录制https协议报证书错误,导航已阻止
  11. SAN存储的配置与管理
  12. 计算机本地磁盘设密码,电脑硬盘,教您电脑硬盘怎么设置密码
  13. 古墓丽影:崛起 PC版今日发售
  14. 基于51单片机的智能窗帘设计
  15. XJTUSE专业课与实验指南(已经开源)
  16. 计算机辅助设计中图元单位,CAD图形单位快捷键
  17. Second season twentieth episode,poor Phoebe
  18. 通过.git/info/exclude文件配置忽略文件
  19. 全志A33uboot设置读秒延时启动Linux,build.sh初步了解
  20. 解决aspose word 中文乱码问题

热门文章

  1. python 流式计算框架_流式计算的三种框架:Storm、Spark和Flink
  2. python调用matlab环境配置、非常详细!!!_[python][matlab]使用python调用matlab程序
  3. 博客目录(python相关)
  4. 逻辑综合工具DesignCompiler使用教程
  5. 定时备份 MySQL 并上传到七牛
  6. python完成‘21点游戏’
  7. java compliance_java complier compliance level问题引发的思考
  8. bic,orr——设置某些位为0或者1
  9. 计算机电缆 耐火,耐火计算机电缆ZR-NH-DJVVP
  10. 使用Vue写一个登陆页面并在管理页面查看和修改