之前使用爬虫时,最让我头疼的就是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值。