Python爬虫笔记【一】模拟用户访问之设置处理cookie(2)

学习的课本为《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 完全一样。

猜你喜欢

转载自www.cnblogs.com/dfy-blog/p/11518630.html
今日推荐