当爬虫遇到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值。

 

 

转载于:https://my.oschina.net/u/3280685/blog/859875

  • 1
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值