Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >cookie在爬虫中的应用

cookie在爬虫中的应用

作者头像
生信修炼手册
发布于 2020-11-02 02:34:24
发布于 2020-11-02 02:34:24
1.7K00
代码可运行
举报
文章被收录于专栏:生信修炼手册生信修炼手册
运行总次数:0
代码可运行

欢迎关注”生信修炼手册”!

当爬取需要登录之后才可以获取的页面时,我们就可以借助cookie来实现。cookie是一种存储在本地浏览器中的用户认证信息,具体表现为一串字符串。当我们在浏览器中登录之后,可以通过F12查看对应的cookie信息,示例如下

cookie的表现形式是键值对,类似python中的字典,可以有多个键,有些网站还会对值进行加密处理。

cookie是一个动态信息,是和服务器交互之后生成的,具有时效性,在有效期内,cookie可以保持用户的登录状态,避免重复登录。当我们手动重新登录时,可以看到cookie的信息发生了变化

利用cookie的这一特性,一个简便的爬取办法是从浏览器获取cookie, 然后用该cookie来与网站交互,从而绕过了登录的限制。在urllib模块中的用法如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> headers = {
...   'Cookie': 'sessionid=feli4ngf23njptxxb0qma5tl04x8wc43; csrftoken=O9YSm7TMaIb2ZdqEnENJY1GBXj3xUE26',
...   'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36',
... }
>>> request = urllib.request.Request('http://www.test.com', headers = headers)
>>> response = urllib.request.urlopen(request)

requests模块中的用法如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import requests
>>> headers = {
...   'Cookie': 'sessionid=feli4ngf23njptxxb0qma5tl04x8wc43; csrftoken=O9YSm7TMaIb2ZdqEnENJY1GBXj3xUE26',
...   'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36',
... }
>>> r = requests.get('http://www.test.com', headers=headers)

如果是短时的数据采集操作,用这种方式还是相当便利的。为了克服cookie的时效性问题,也可以通过爬虫模拟登录,然后动态获取cookie信息。当然,模拟登录是比较复杂的,对于简单的用户名和密码登录的网站,程序处理还比较简单,对于需要验证码的网站,验证码的机器识别的难度决定了模拟登录的难度。

可以做到模拟登录的话,就可以通过http.cookiejar来自动管理cookie, 代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import urllib.request
>>> import http.cookiejar
>>>
>>> url = 'http://www.test.com'
>>> user = 'user'
>>> password = 'passwd'
>>> # 账号,密码的验证
>>> pwdmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
>>> pwdmgr.add_password(None, url, user, password)
>>> auth_handler = urllib.request.HTTPBasicAuthHandler(pwdmgr)
>>>
>>> # cookie处理
>>> cookies = http.cookiejar.CookieJar()
>>> cookie_handler = urllib.request.HTTPCookieProcessor(cookies)
>>>
>>> # 构建opener
>>> opener = urllib.request.build_opener(auth_handler, cookie_handler)
>>>
>>> # 安装为全局
>>> urllib.request.install_opener(opener)
>>>
>>> r = urllib.request.urlopen(url)
>>>
>>> for item in cookies:
... print(item.name+'='+item.value)
...
sessionid=frrg9le03nkw959upu1bnrew9j4eu5ex

cookie可以保护我们的登录信息,适用于爬取需要登录之后才能查看的页面,手动管理操作简便,自动管理需要克服模拟登录的难点。

·end·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

更多精彩

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spark SQL重点知识总结
Spark SQL是spark套件中一个模板,它将数据的计算任务通过SQL的形式转换成了RDD的计算,类似于Hive通过SQL的形式将数据的计算任务转换成了MapReduce。
王知无-import_bigdata
2019/06/20
1.9K0
Spark SQL重点知识总结
Spark SQL | Spark,从入门到精通
欢迎阅读美图数据技术团队的「Spark,从入门到精通」系列文章,本系列文章将由浅入深为大家介绍 Spark,从框架入门到底层架构的实现,相信总有一种姿势适合你。
美图数据技术团队
2019/04/19
2.1K0
Spark SQL | Spark,从入门到精通
05-快速理解SparkSQL的DataSet
可从JVM对象构造Dataset,然后函数式转换(map、flatMap、filter等)操作。Dataset API在Scala和Java中可用。
JavaEdge
2024/05/26
1000
05-快速理解SparkSQL的DataSet
第三天:SparkSQL
Spark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrame和DataSet,并且作为分布式SQL查询引擎的作用。 我们已经学习了Hive,它是将Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduc的程序的复杂性,由于MapReduce这种计算模型执行效率比较慢。所有Spark SQL的应运而生,它是将Spark SQL转换成RDD,然后提交到集群执行,执行效率非常快!
sowhat1412
2020/11/05
13.5K0
第三天:SparkSQL
DataFrame常用API操作
以列的(列名,列的类型。列值)的形式构成的分布式数据集,按照列赋予不同名称,约等于关系数据库的数据表
羊羽shine
2019/08/27
1.3K0
Spark SQL DataFrame与RDD交互
Spark SQL 支持自动将 JavaBeans 的 RDD 转换为 DataFrame。使用反射获取的 BeanInfo 定义了表的 schema。目前为止,Spark SQL 还不支持包含 Map 字段的 JavaBean。但是支持嵌套的 JavaBeans,List 以及 Array 字段。你可以通过创建一个实现 Serializable 的类并为其所有字段设置 getter 和 setter 方法来创建一个 JavaBean。
smartsi
2019/08/07
1.8K0
spark2 sql读取数据源编程学习样例2:函数实现详解
问题导读 1.RDD转换为DataFrame需要导入哪个包? 2.Json格式的Dataset如何转换为DateFrame? 3.如何实现通过jdbc读取和保存数据到数据源? spark2 sql
用户1410343
2018/03/26
1.4K0
spark2 sql读取数据源编程学习样例2:函数实现详解
Spark SQL 快速入门系列(2) | SparkSession与DataFrame的简单介绍
  在老的版本中,SparkSQL 提供两种 SQL 查询起始点:一个叫SQLContext,用于Spark 自己提供的 SQL 查询;一个叫 HiveContext,用于连接 Hive 的查询。
不温卜火
2020/10/28
2.3K0
Spark SQL 快速入门系列(2) | SparkSession与DataFrame的简单介绍
适合小白入门的IDEA开发SparkSQL详细教程
之前博主利用业余时间,梳理了一份《SparkSQL编程系列》,奈何当时考虑不周,写的不是很详细。于是在正式开始学习了之后,决定整理一篇适合像我一样的小白级别都能看得懂的IDEA操作SparkSQL教程,于是就有了下文…
大数据梦想家
2021/01/27
2K0
适合小白入门的IDEA开发SparkSQL详细教程
Spark SQL从入门到精通
熟悉spark sql的都知道,spark sql是从shark发展而来。Shark为了实现Hive兼容,在HQL方面重用了Hive中HQL的解析、逻辑执行计划翻译、执行计划优化等逻辑,可以近似认为仅将物理执行计划从MR作业替换成了Spark作业(辅以内存列式存储等各种和Hive关系不大的优化);
Spark学习技巧
2019/05/09
1.2K0
Spark SQL从入门到精通
大数据技术之_19_Spark学习_03_Spark SQL 应用解析小结
========== Spark SQL ========== 1、Spark SQL 是 Spark 的一个模块,可以和 RDD 进行混合编程、支持标准的数据源、可以集成和替代 Hive、可以提供 JDBC、ODBC 服务器功能。
黑泽君
2019/05/10
1.6K0
Spark之【SparkSQL编程】系列(No1)——《SparkSession与DataFrame》
上一篇博客已经为大家介绍完了SparkSQL的基本概念以及其提供的两个编程抽象:DataFrame和DataSet,本篇博客,博主要为大家介绍的是关于SparkSQL编程的内容。考虑到内容比较繁琐,故分成了一个系列博客。本篇作为该系列的第一篇博客,为大家介绍的是SparkSession与DataFrame。
大数据梦想家
2021/01/27
1.7K0
Spark之【SparkSQL编程】系列(No1)——《SparkSession与DataFrame》
Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets Guide | ApacheCN
本文介绍了基于Spark的SQL编程的常用概念和技术。首先介绍了Spark的基本概念和架构,然后详细讲解了Spark的数据类型和SQL函数,最后列举了一些Spark在实际应用中的例子。
片刻
2018/01/05
26.6K0
慕课网Spark SQL日志分析 - 5.DateFrame&Dataset
DataFrame 不是Spark Sql提出的。而是在早起的Python、R、Pandas语言中就早就有了的。
Meet相识
2018/09/12
7460
慕课网Spark SQL日志分析 - 5.DateFrame&Dataset
Spark SQL | 目前Spark社区最活跃的组件之一
Spark SQL是一个用来处理结构化数据的Spark组件,前身是shark,但是shark过多的依赖于hive如采用hive的语法解析器、查询优化器等,制约了Spark各个组件之间的相互集成,因此Spark SQL应运而生。
大数据学习与分享
2020/08/10
2.5K0
Spark SQL | 目前Spark社区最活跃的组件之一
spark2的SparkSession思考与总结2:SparkSession有哪些函数及作用是什么
问题导读 1.spark SparkSession包含哪些函数? 2.创建DataFrame有哪些函数? 3.创建DataSet有哪些函数? 上一篇spark2:SparkSession思考与总
用户1410343
2018/03/26
3.8K0
Spark SQL快速入门系列之Hive
hive on spark(版本兼容) 官网https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started
王知无-import_bigdata
2020/09/08
1.3K0
BigData--大数据技术之SparkSQL
一、Spark SQL概述 1、DataFrame 与RDD类似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。从API易用性的角度上看,DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加友好,门槛更低。 2、DataSet 1)是Dataframe API的一个扩展,是Sp
MiChong
2020/09/24
1.4K0
BigData--大数据技术之SparkSQL
SparkSQL
Hive on Spark:Hive既作为存储元数据又负责SQL的解析优化,语法是HQL语法,执行引擎变成了Spark,Spark负责采用RDD执行。
ha_lydms
2023/11/04
5530
SparkSQL
RDD和DataFrame转换
在利用反射机制推断RDD模式时,需要首先定义一个case class,因为,只有case class才能被Spark隐式地转换为DataFrame。
羊羽shine
2019/08/23
1.3K0
推荐阅读
相关推荐
Spark SQL重点知识总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验