python爬虫判断cookie过期_当爬虫遇到cookie失效,怎样处理?

之前使用爬虫时,最让我头疼的就是cookie失效的问题了。由于有的cookie存在时效问题。一段时间后,cookies会失效。失效后,爬虫碰到的页面就基本上是重新登录的页面了。这时候就需要cookie自动的更新了。通常怎样自动更新cookie呢?这里会用到selenium。

步骤1、 采用selenium自动登录获取cookie,保存到文件;

步骤2、 读取cookie,比较cookie的有效期,若过期则再次执行步骤1;

步骤3、 在请求其他网页时,填入cookie,实现登录状态的保持。

经过百度,google,加上自己的一些探索,探索出了模拟自动获取淘宝cookies。

import os

import pickle

import time

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

from selenium import webdriver

def get_cookie_from_network():

# 这个url比较关键,网络上比较老的办法是

# url_login = 'https://login.taobao.com/member/login.jhtml'

# 测试之后发现,会报错“可能不是一个可交互的element”

# 在后面添加?style=mini后就可以了

url_login = 'https://login.taobao.com/member/login.jhtml?style=mini'

# 这一段是为了给selenium添加user-agent。模拟浏览器

dcap = dict(DesiredCapabilities.PHANTOMJS)

dcap["phantomjs.page.settings.userAgent"] = ("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0 ")

driver = webdriver.PhantomJS(desired_capabilities=dcap)

driver.implicitly_wait(1)

driver.get(url_login)

# driver.find_element_by_id("J_Static2Quick").click()

driver.find_element_by_id("TPL_username_1").clear()

driver.find_element_by_id("TPL_password_1").clear()

driver.find_element_by_id('TPL_username_1').send_keys(u'张小呆920318')

driver.find_element_by_id('TPL_password_1').send_keys('plus820828')

driver.find_element_by_id('J_SubmitStatic').click()

# 获得 cookie信息

cookie_list = driver.get_cookies()

print cookie_list

cookie_dict = {}

for cookie in cookie_list:

#写入文件

f = open('cookies/' + cookie['name']+'.taobao','w')

pickle.dump(cookie, f)

f.close()

if cookie.has_key('name') and cookie.has_key('value'):

cookie_dict[cookie['name']] = cookie['value']

return cookie_dict

将获取的cookies存储在文件中。后期,你可以把它封装成一个函数放在爬虫的__init__中,也可以利用linux的crontab来定时获取最新的cookies值。

你可能感兴趣的:(python爬虫判断cookie过期_当爬虫遇到cookie失效,怎样处理?)