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值。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通过Python爬虫自建豆瓣电影API.zip 项目简介 在开发微信小程序「影库MDb」时,使用了豆瓣api来获取电影信息,后来由于豆瓣apikey失效了,小程序就无法正常访问,而个人主体貌似无法申请官方apikey,所以自己抽时间通过爬虫的方式写了个电影接口。这里把项目中的电影接口部分单独提取出来,分享给有需要的朋友。 本项目使用Python Flask框架搭建,采用爬取豆瓣官网的方式,获取并处理电影信息,返回的Json数据,便于小程序使用。 主要实现的功能有获取电影列表,获取电影信息、图片、演员等,以及获取影人信息、图片、作品,具体可参考api文档。 开发技术 编程语言:Python 3.7 WEB框架:Flask WSGI服务器:Waitress 使用方法 先部署环境,安装依赖。 pip install -r requirements.txt 直接运行run.py即可,我设置的5000端口,可改为其它,部署后可通过nginx来代理。 python run.py 成功运行之后可以通过 http://localhost:5000+对应URL和参数 来获取数据,URL和参数详见API文档。 建议直接部署使用,因为每次请求都要现爬取并处理数据,占用资源,响应比较慢,并且爬虫受限。可以在此基础上进行开发,将数据保存到本地数据库,然后定期更新数据。如果要部署使用,建议在config目录的配置文件里的HEADERS和PROXIES加上对应配置,来解决豆瓣爬虫限制。 使用建议 豆瓣官网有反爬机制,单ip有访问限制,所以建议增加ip代理池。 部分影视不登录豆瓣账号无法查看信息,所以建议增加cookie。 建议将爬取处理好的数据保存到本地数据库(推荐mongodb),处理逻辑是:访问接口->查询本地数据库->有返回数据,没有现爬数据并存储。 如果将数据存到本地,电影的一些数据会变化,建议添加个时间字段,用于定期更新数据。 由于我是在Windows服务器运行,使用的是Waitress,Linux建议更换其它WSGI服务器。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值