经常写爬虫的都知道 , 有些页面在登录之前是被禁止抓取的 , 比如知乎的话题页面就要求用户登录才能访问 , 而 “登录” 离不开 HTTP 中的 Cookie 技术 。
登录原理
Cookie 的原理非常简单 , 因为 HTTP 是一种无状态的协议 , 因此为了在无状态的 HTTP 协议之上维护会话(session)状态 , 让服务器知道当前是和哪个客户在打交道 , Cookie 技术出现了 , Cookie 相当于是服务端分配给客户端的一个标识 。
文章插图
cookie
- 浏览器第一次发起 HTTP 请求时 , 没有携带任何 Cookie 信息
- 服务器把 HTTP 响应 , 同时还有一个 Cookie 信息 , 一起返回给浏览器
- 浏览器第二次请求就把服务器返回的 Cookie 信息一起发送给服务器
- 服务器收到HTTP请求 , 发现请求头中有Cookie字段 , 便知道之前就和这个用户打过交道了 。
用过知乎的都知道 , 只要提供用户名和密码以及验证码之后即可登录 。当然 , 这只是我们眼中看到的现象 。而背后隐藏的技术细节就需要借助浏览器来挖掘了 。现在我们就用 Chrome 来查看当我们填完表单后 , 究竟发生了什么?
文章插图
(如果已经登录的 , 先退出)首先进入知乎的登录页面 www.zhihu.com/#signin , 打开 Chrome 的开发者工具条(按 F12)先尝试输入一个错误的验证码观察浏览器是如何发送请求的 。
文章插图
从浏览器的请求可以发现几个关键的信息
- 登录的 URL 地址是 www.zhihu.com/login/email
- 登录需要提供的表单数据有4个:用户名(email)、密码(password)、验证码(captcha)、_xsrf 。
- 获取验证码的URL地址是 www.zhihu.com/captcha.gif…
文章插图
摸清了浏览器登录时所需要的数据是如何获取之后 , 那么现在就可以开始写代码用 Python 模拟浏览器来登录了 。登录时所依赖的两个第三方库是 requests 和 BeautifulSoup , 先安装
pip install beautifulsoup4==4.5.3pip install requests==2.13.0复制代码http.cookiejar 模块可用于自动处理HTTP Cookie , LWPCookieJar 对象就是对
推荐阅读
- php输出之echo和print语句
- 明日之子第5季 明日之子第五季什么时候开播
- 中国茶文化之,茶道篇
- 地下城与勇士|DNF:职业转换之间的不同改变点,转职书使用应该这样考虑
- 喝醉了之后吃什么解酒最快
- 云南滇红的品质
- 韩国茶道文化之茶食
- 茶艺四要之三,火
- 宋代茶道意境之斗茶
- 茶经,九之略