热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

爬虫5.Cookie

Cookie是指某些网站服务器为了辨别用户身份和进行Session跟踪,而存储在用户浏览器的文本文件,Cookie可以保持登陆信息到用户下次与服务器会话

COOKIE
是指某些网站服务器为了辨别用户身份和进行Session跟踪,而存储在用户浏览器的文本文件,COOKIE可以保持登陆信息到用户下次与服务器会话。

COOKIE原理

HTTP是无状态的面向连接的协议, 为了保持连接状态, 引入了COOKIE机制 COOKIE是http消息头中的一种属性,包括:

COOKIE名字(Name)
COOKIE的值(Value)
COOKIE的过期时间(Expires/Max-Age)
COOKIE作用路径(Path)
COOKIE所在域名(Domain),
使用COOKIE进行安全连接(Secure)。

前两个参数是COOKIE应用的必要条件,另外,还包括COOKIE大小(Size,不同浏览器对COOKIE个数及大小限制是有差异的)。

COOKIE由变量名和值组成,根据 Netscape公司的规定,COOKIE格式如下:
Set-COOKIE: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE

构建一个已经登录过的用户的headers信息

#构建一个已经登录过的用户的headers信息
headers = {"Host":"www.renren.com","Connection":"keep-alive","Upgrade-Insecure-Requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36","Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8","Accept-Language":"zh-CN,zh;q=0.8,en;q=0.6",# 便于终端阅读,表示不支持压缩文件# Accept-Encoding: gzip, deflate, sdch,# 这个COOKIE是保存了密码无需重复登录的用户的COOKIE,这个COOKIE里记录了用户名,密码(通常经过RAS加密)"COOKIE":"_ga=GA1.2.1071370191.1536665724; _gid=GA1.2.66980xx15.1536665724; .CNBlogsCOOKIE=E35xx4049853DF7D8C1C98C; ........"
}

COOKIElib库 和 HTTPCOOKIEProcessor处理器

在Python处理COOKIE,一般是通过COOKIElib模块和 urllib下request模块的HTTPCOOKIEProcessor处理器类一起使用。

COOKIElib模块:主要作用是提供用于存储COOKIE的对象

HTTPCOOKIEProcessor处理器:主要作用是处理这些COOKIE对象,并构建handler对象。

COOKIElib 库

该模块主要的对象有COOKIEJar、FileCOOKIEJar、MozillaCOOKIEJar、LWPCOOKIEJar。

COOKIEJar:管理HTTP COOKIE值、存储HTTP请求生成的COOKIE、向传出的HTTP请求添加COOKIE的对象。整个COOKIE都存储在内存中,对COOKIEJar实例进行垃圾回收后COOKIE也将丢失。

FileCOOKIEJar (filename,delayload=None,policy=None):从COOKIEJar派生而来,用来创建FileCOOKIEJar实例,检索COOKIE信息并将COOKIE存储到文件中。filename是存储COOKIE的文件名。delayload为True时支持延迟访问访问文件,即只有在需要时才读取文件或在文件中存储数据。

MozillaCOOKIEJar (filename,delayload=None,policy=None):从FileCOOKIEJar派生而来,创建与Mozilla浏览器 COOKIEs.txt兼容的FileCOOKIEJar实例。

LWPCOOKIEJar (filename,delayload=None,policy=None):从FileCOOKIEJar派生而来,创建与libwww-perl标准的 Set-COOKIE3 文件格式兼容的FileCOOKIEJar实例。

大多数情况下,我们只用COOKIEJar(),如果需要和本地文件交互,就用 MozillaCookjar() 或 LWPCOOKIEJar()

获取COOKIE,并保存到COOKIEJar()对象中:


import urllib
import COOKIElib# 构建一个COOKIEJar对象实例来保存COOKIE
COOKIEjar = COOKIElib.COOKIEJar()# 使用HTTPCOOKIEProcessor()来创建COOKIE处理器对象,参数为COOKIEJar()对象
handler=urllib.request.HTTPCOOKIEProcessor(COOKIEjar)# 通过 build_opener() 来构建opener
opener = urllib.request.build_opener(handler)# 4. 以get方法访问页面,访问之后会自动保存COOKIE到COOKIEjar中
opener.open("http://www.baidu.com")## 可以按标准格式将保存的COOKIE打印出来
COOKIEStr = ""
for item in COOKIEjar:COOKIEStr = COOKIEStr + item.name + "=" + item.value + ";"## 舍去最后一位的分号
print COOKIEStr[:-1]

访问网站获得COOKIE,并把获得的COOKIE保存在COOKIE文件中

import COOKIElib
import urllib# 保存COOKIE的本地磁盘文件名
filename = 'COOKIE.txt'# 声明一个MozillaCOOKIEJar(有save实现)对象实例来保存COOKIE,之后写入文件
COOKIEjar = COOKIElib.MozillaCOOKIEJar(filename)# 使用HTTPCOOKIEProcessor()来创建COOKIE处理器对象,参数为COOKIEJar()对象
handler = urllib.request.HTTPCOOKIEProcessor(COOKIEjar)# 通过 build_opener() 来构建opener
opener = urllib.request.build_opener(handler)# 创建一个请求,原理同urllib的urlopen
response = opener.open("http://www.baidu.com")# 保存COOKIE到本地文件
COOKIEjar.save()

从文件中获取COOKIEs,做为请求的一部分去访问

import COOKIElib
import urllib# 创建MozillaCOOKIEJar(有load实现)实例对象
COOKIEjar = COOKIElib.MozillaCOOKIEJar()# 从文件中读取COOKIE内容到变量
COOKIE.load('COOKIE.txt')# 使用HTTPCOOKIEProcessor()来创建COOKIE处理器对象,参数为COOKIEJar()对象
handler = urllib.request.HTTPCOOKIEProcessor(COOKIEjar)# 通过 build_opener() 来构建opener
opener = urllib.request.build_opener(handler)response = opener.open("http://www.baidu.com")

利用COOKIElib, Post登录

import urllib
import COOKIElib# 1. 构建一个COOKIEJar对象实例来保存COOKIE
COOKIE = COOKIElib.COOKIEJar()# 2. 使用HTTPCOOKIEProcessor()来创建COOKIE处理器对象,参数为COOKIEJar()对象
COOKIE_handler = urllib.request.HTTPCOOKIEProcessor(COOKIE)# 3. 通过 build_opener() 来构建opener
opener = urllib.request.build_opener(COOKIE_handler)# 4. addheaders 接受一个列表,里面每个元素都是一个headers信息的元祖, opener将附带headers信息
opener.addheaders = [("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36")]# 5. 需要登录的账户和密码
data = {"email":"xxxx@163.com", "password":"123456"} # 6. 通过urlencode()转码
postdata = urllib.parse.urlencode(data)# 7. 构建Request请求对象,包含需要发送的用户名和密码
request = urllib.request.Request("http://www.baidu.com/", data = postdata)# 8. 通过opener发送这个请求,并获取登录后的COOKIE值,
opener.open(request) # 9. opener包含用户登录后的COOKIE值,可以直接访问那些登录后才可以访问的页面
response = opener.open("http://xueshu.baidu.com/usercenter/data/authorchannel?cmd=inject_page") # 10. 打印响应内容
print(response.read())

当然,我们也可以直接发送账号密码到登录界面模拟登录,但是当网页采用Javascript动态技术以后,想封锁基于 HttpClient 的模拟登录就太容易了,甚至可以根据你的鼠标活动的特征准确地判断出是不是真人在操作。
所以,想做通用的模拟登录还得选别的技术,比如用内置浏览器引擎的爬虫(关键词:Selenium ,PhantomJS),这个我们将在以后会介绍。

转:https://www.cnblogs.com/shuai-long/p/9630001.html



推荐阅读
  • 可转债数据智能抓取与分析平台优化
    本项目旨在优化可转债数据的智能抓取与分析平台。通过爬取集思录上的可转债信息(排除已发布赎回的债券),并结合安道全教授提出的三条安全线投资策略,新增了建仓线、加仓线和重仓线,以提供更精准的投资建议。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 在今天的实践中,我深入学习了网页图像抓取技术,通过编写爬虫程序批量获取网站上的图片资源。具体来说,我选择了一个包含大量高质量图片的网站作为练习对象,并成功实现了将这些图片批量下载到本地存储。这一过程不仅提升了我对爬虫技术的理解,还增强了我的编程能力。 ... [详细]
  • 本文介绍了使用 Python 编程语言高效抓取微博文本和动态网页图像数据的方法。通过详细的示例代码,展示了如何利用爬虫技术获取微博内容和动态图片,为数据采集和分析提供了实用的技术支持。对于对网络数据抓取感兴趣的读者,本文具有较高的参考价值。 ... [详细]
  • 如何在PHP中获取数组中特定元素的索引位置
    在PHP中获取数组中特定元素的索引位置有多种方法。首先,可以使用 `array_search()` 函数,其语法为 `array_search(目标值, $array)`,该函数将返回匹配元素的第一个键名(即下标)。其次,也可以利用 `array_keys()` 函数,通过 `array_keys($array, 目标值)` 语法来获取所有匹配元素的键名列表。这两种方法都能有效解决数组元素定位的问题,具体选择取决于实际需求和性能考虑。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • 在PHP中实现腾讯云接口签名,以完成人脸核身功能的对接与签名配置时,需要注意将文档中的POST请求改为GET请求。具体步骤包括:使用你的`secretKey`生成签名字符串`$srcStr`,格式为`GET faceid.tencentcloudapi.com?`,确保参数正确拼接,避免因请求方法错误导致的签名问题。此外,还需关注API的其他参数要求,确保请求的完整性和安全性。 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
author-avatar
Naive
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有