学习的课本为《python网络数据采集》,大部分代码来此此书。

  做完请求头的处理,cookie的值也是区分用户和机器的一个方式。所以也要处理一下cookie,需要用requests模块,废话不多说开搞。

  1.一般情况下python修改cookie

首先获得cookie

import requests

params = {'username': 'Ryan', 'password': 'password'}  #设一个字典,输入用户名和密码,这个跟host请求差不多
r = requests.post("http://pythonscraping.com/pages/cookies/welcome.php",params)
print("Cookie is set to:")
print(r.cookies.get_dict()) #获取cookie,并输出
print("-----------")
print("Going to profile page...")
r = requests.get("http://pythonscraping.com/pages/cookies/profile.php",cookies=r.cookies) #发送cookie
print(r.text)

  2.对于变化cookie

如果你面对的网站比较复杂,它经常暗自调整cookie,或者如果你从一开始就完全不想要用cookie,Requests 库的session 函数可以解决这些问题:

import requests
session = requests.Session()
params = {'username': 'username', 'password': 'password'}
s = session.post("http://pythonscraping.com/pages/cookies/welcome.php", params)
print("Cookie is set to:")
print(s.cookies.get_dict())
print("-----------")
print("Going to profile page...")
s = session.get("http://pythonscraping.com/pages/cookies/profile.php")
print(s.text)

以上代码没有设置cookie值,这便是session的方便之处。会话(session)对象(调用requests.Session() 获取)会持续跟踪会话信息,像cookie、header,甚至包括运行HTTP 协议的信息,HTTPAdapter(为HTTP和HTTPS 的链接会话提供统一接口)

  3.基于用户操作后脚本产生的cookie

因为requests 模块不能执行JavaScript,所以它不能处理很多新式的跟踪软件生成的cookie,比如Google Analytics,只有当客户端脚本执行后才设置cookie(或者在用户浏览页面时基于网页事件产生cookie,比如点击按钮)。为了处理这些动作,你需要用Selenium 和PhantomJS 包(phantomJS包已经凉了,可以用火狐或者谷歌的代替)

(1)获取cookie

from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.bilibili.com/")
driver.implicitly_wait(1)
print(driver.get_cookies())

(2)调用delete_cookie()、add_cookie() 和delete_all_cookies() 方法来处理cookie

另外,还可以保存cookie 以备其他网络爬虫使用。下面的例子演示了如何把这些函数组合在一起:

from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://pythonscraping.com") 
driver.implicitly_wait(1) print(driver.get_cookies())
savedCookies = driver.get_cookies() driver2 = webdriver.Firefox() driver2.get("http://pythonscraping.com")
driver2.delete_all_cookies()
for cookie in savedCookies:
  driver2.add_cookie(cookie)
driver2.get("http://pythonscraping.com")
driver.implicitly_wait(1)
print(driver2.get_cookies())

在这个例子中,第一个webdriver 获得了一个网站,打印cookie 并把它们保存到变量savedCookies 里。第二个webdriver 加载同一个网站(技术提示:必须首先加载网站,这样Selenium 才能知道cookie 属于哪个网站,即使加载网站的行为对我们没任何用处),删除所有的cookie,然后替换成第一个webdriver 得到的cookie。当再次加载这个页面时,两组cookie 的时间戳、源代码和其他信息应该完全一致。Google Analytics 的角度看,第二个webdriver 现在和第一个webdriver 完全一样。

Python爬虫笔记【一】模拟用户访问之设置处理cookie(2)的更多相关文章

  1. Python爬虫笔记【一】模拟用户访问之设置请求头 (1)

    学习的课本为<python网络数据采集>,大部分代码来此此书. 网络爬虫爬取数据首先就是要有爬取的权限,没有爬取的权限再好的代码也不能运行.所以首先要伪装自己的爬虫,让爬虫不像爬虫而是像人 ...

  2. python爬虫笔记Day01

    python爬虫笔记第一天 Requests库的安装 先在cmd中pip install requests 再打开Python IDM写入import requests 完成requests在.py文 ...

  3. [Python爬虫笔记][随意找个博客入门(一)]

    [Python爬虫笔记][随意找个博客入门(一)] 标签(空格分隔): Python 爬虫 2016年暑假 来源博客:挣脱不足与蒙昧 1.简单的爬取特定url的html代码 import urllib ...

  4. Python爬虫笔记一(来自MOOC) Requests库入门

    Python爬虫笔记一(来自MOOC) 提示:本文是我在中国大学MOOC里面自学以及敲的一部分代码,纯一个记录文,如果刚好有人也是看的这个课,方便搬运在自己电脑上运行. 课程为:北京理工大学-嵩天-P ...

  5. Python之路,Day22 - 网站用户访问质量分析监测分析项目开发

    Python之路,Day22 - 网站用户访问质量分析监测分析项目开发   做此项目前请先阅读 http://3060674.blog.51cto.com/3050674/1439129  项目实战之 ...

  6. Python爬虫笔记【一】模拟用户访问之提交表单登入—第二次(7)

    在第一次登入时遇到这个问题,页面验证码与下载下来需要识别的验证码不同的问题,从网上查寻说是叫验证码同步问题.发现是用cookie解决的,那次cookie介绍到通过cookie就可以实现时间戳同步问题, ...

  7. Python爬虫笔记(一):爬虫基本入门

    最近在做一个项目,这个项目需要使用网络爬虫从特定网站上爬取数据,于是乎,我打算写一个爬虫系列的文章,与大家分享如何编写一个爬虫.这是这个项目的第一篇文章,这次就简单介绍一下Python爬虫,后面根据项 ...

  8. 《转载》python爬虫实践之模拟登录

    有些网站设置了权限,只有在登录了之后才能爬取网站的内容,如何模拟登录,目前的方法主要是利用浏览器cookie模拟登录.   浏览器访问服务器的过程   在用户访问网页时,不论是通过URL输入域名或IP ...

  9. Python爬虫笔记安装篇

    目录 爬虫三步 请求库 Requests:阻塞式请求库 Requests是什么 Requests安装 selenium:浏览器自动化测试 selenium安装 PhantomJS:隐藏浏览器窗口 Ph ...

随机推荐

  1. Pycharm中如何加载多个项目同时存在

    原文地址: http://www.cnblogs.com/mrgavin/p/6382406.html 今天在使用Pycharm工具练习Python时遇到一个疑问:在已存有项目A工程的前提下如何新建另 ...

  2. 用原生js封装轮播图

    原生js封装轮播图 对于初学js的同学来说,轮播图还是一个难点,尤其是原生js封装轮播图代码,下面是我之前做的一个轮播图项目中封装好的一些代码,有需要的同学可以看一下,有什么不懂的可以看注释,注释看不 ...

  3. 一文教会你用Python实现最有效的剪切板实时监控

    前言 上网浏览网页的时候,看见好的内容免不了要使用复制粘贴,但是我们看到的内容.心里想要的内容和实际粘贴后的内容往往不一致.数据的获取始于复制,终于粘贴,那么问题来了,在这中间系统做了哪些操作,我们怎 ...

  4. appium基础一:连接手机和appium-desktop定位元素

    一.获取手机信息 adb devices获取手机或模拟器的设备名 aapt dump badging xxxx.apk获取app的包名.入口等基本信息 如果想要知道手机原生携带的app的基本信息,首先 ...

  5. sparkStreaming结合sparkSql进行日志分析

    package testimport java.util.Propertiesimport org.apache.spark.SparkConfimport org.apache.spark.Spar ...

  6. 编写main方法

  7. LuoguP3498 [POI2010]KOR-Beads

    呀呀呀,临走10分钟刷一道水题 然而只是记一下第一次hash被卡 各种模数都被卡了... 本来想打双哈希了,后来皮了一下,模数改成了998244353,然后竟然A掉了 正着hash一遍,反着hash一 ...

  8. CF627A Xor Equation

    题意:a+b=s,a^b=x(异或).问有多少有序Z+对(a,b)满足条件. 标程: #include<cstdio> using namespace std; typedef long ...

  9. SPOJ - LOCKER

    SPOJ - LOCKERhttps://vjudge.net/problem/45908/origin暴力枚举2-102 23 34 2 25 2 36 3 37 2 2 38 2 3 39 3 3 ...

  10. 阿里巴巴飞天大数据架构体系与Hadoop生态系统

    很多人问阿里的飞天大数据平台.云梯2.MaxCompute.实时计算到底是什么,和自建Hadoop平台有什么区别. 先说Hadoop 什么是Hadoop? Hadoop是一个开源.高可靠.可扩展的分布 ...