scrapy 设置cookie池

代码已经很详细了,可以直接拿来使用了。

包含了:

  • 从网页获取cookie
  • 存入mongodb
  • 定期删除cookie
  • scrapy中间件对cookie池的取用
#!/usr/bin/python
#coding=utf-8
#__author__=‘dahu‘
#data=2017-
#
import requests
import time
from pymongo import MongoClient
import cookielib
import urllib2
from bson.objectid import ObjectId
url = ‘https://www.so.com‘
# url = ‘https://cn.bing.com/translator‘
client = MongoClient(‘localhost‘, 27017)
db = client[‘save_cookie‘]
collection = db[‘san60cookie‘]

def get_header():
    header={
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4",
        "Cache-Control": "max-age=0",
        "Connection": "keep-alive",
        "Host": "www.so.com",
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36",
    }
    return headerdef get_cookie_lib():
    cookie = cookielib.CookieJar()
    handler = urllib2.HTTPCookieProcessor(cookie)
    opener = urllib2.build_opener(handler)
    response = opener.open(url)
    # for item in cookie:
    #     print "%s : %s" % (item.name, item.value)
    cookie_dict = {}
    for cook in cookie:
        cookie_dict[cook.name] = cook.value
    return cookie_dict

def save_cookie_into_mongodb(cookie):
    print ‘insert‘
    insert_data = {}
    insert_data[‘cookie‘] = cookie
    insert_data[‘insert_time‘] = time.strftime(‘%Y-%m-%d %H:%M:%S‘)
    insert_data[‘request_url‘]=url
    insert_data[‘insert_timestamp‘] = time.time()
    collection.insert(insert_data)

def delete_timeout_cookie(request_url):
    time_out = 300
    for data in collection.find({‘request_url‘:request_url}):
        if (time.time() - data.get(‘insert_timestamp‘)) > time_out:
            print ‘delete: %s‘ % data.get(‘_id‘)
            collection.delete_one({‘_id‘: ObjectId(data.get(‘_id‘))})       #这里有疑问的话可以参考http://api.mongodb.com/python/current/tutorial.html#querying-by-objectid 

def get_cookie_from_mongodb():
    cookies = [data.get(‘cookie‘) for data in collection.find()]
    return cookies

if __name__ == ‘__main__‘:
    num=0
    while 1:
        if num == 2:
            print ‘deleting‘
            delete_timeout_cookie(url)
            num = 0
        else:
            cookie = get_cookie_lib()
            save_cookie_into_mongodb(cookie)
            num += 1
            time.sleep(5)

对应的middleware文件,可以写成这样

import random
class CookiesMiddleware(object):
    def process_request(self,request,spider):
        cookie = random.choice(get_cookie_from_mongodb())
        request.cookies = cookie
时间: 2024-08-30 17:38:39

scrapy 设置cookie池的相关文章

JS设置cookie,删除cookie(引)

JS设置cookie,删除cookie(引) js设置cookie有很多种方法. 第一种:(这个是w3c官网的代码) <script> //设置cookie function setCookie(cname, cvalue, exdays) { var d = new Date(); d.setTime(d.getTime() + (exdays*24*60*60*1000)); var expires = "expires="+d.toUTCString(); docum

运用JS设置cookie、读取cookie、删除cookie

运用JS设置cookie.读取cookie.删除cookie JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的. 而cookie是运行在客户端的,所以可以用JS来设置cookie. 假 设有这样一种情况,在某个用例流程中,由A页面跳至B页面,若在A页面中采用JS用变量temp保存了某一变量的值,在B页面的时候,同样需要使用JS来 引用temp的变量值,对于JS中的全局变量或者静态变量的生命周期是有限的,当发生页面跳转或者页面关闭

关于启明星系统移除apppath配置,让系统自动获取路径来设置cookie的解决方法

启明星系统底层使用统一接口,特别是用户,用户登录后,都会建立一个 userinfo 的cookie.请看下面2个网址: http://120.24.86.232/book http://120.24.86.232/helpdesk 通常,如果不显式的设置cookie,cookie默认将把userinfo cookie存放在 / 主目录下. 这样,book系统和helpdesk系统可以共享这个系统.换句话说,用户登录了一个系统,另外一个也将自动系统. 不过,在我演示站点里,为了区分不同的系统,我并

C#读取设置Cookie

设置: HttpCookie cookie = new HttpCookie("cookieName"); cookie.Value = "name1" HttpContext.Current.Response.Cookies.Add(cookie); 读取: HttpContext.Current.Request.Cookies["cookieName"].Value 判断cookie是否存在: if(HttpContext.Current.R

设置cookie、获取cookie、删除cookie函数封装

//设置cookie函数function setCookie(key,value,t){   var oDate = new Date();   oDate.setDate( oDate.getDate() + t );   document.cookie = key + '=' + encodeURI(value) + ';expires=' + oDate.toGMTString();} //获取cookie函数function getCookie(key){ //通过分号空格拆分开所有co

JS通过设置cookie来控制弹出层,首次打开页面显示弹出层

<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.jb51.net/" /> <title>JS通过设置cookie来控制弹出层,首次打开页面显示弹出层,刷新页面不再显示:关闭浏览器重新打开.清除缓存cookie显示.</title&

设置cookie、读取cookie、删除cookie

假设有这样一种情况,在某个用例流程中,由A页面跳至B页面,若在A页面中采用JS用变量temp保存了某一变量的值,在B页面的时候,同样需要使 用JS来引用temp的变量值,对于JS中的全局变量或者静态变量的生命周期是有限的,当发生页面跳转或者页面关闭的时候,这些变量的值会重新载入,即没 有达到保存的效果.解决这个问题的最好的方案是采用cookie来保存该变量的值,那么如何来设置和读取cookie呢? 1.什么是Cookie "Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身

jQuery 插件设置cookie

对cookies的操作在当访问一个网站就无时无刻的都伴随着我们,记录着我们的一举一动,并将不危害用户隐私的信息,将以保存,这样用户就不用去从新再次操作重复的步骤,这样大大方便了客户,也增加了客户对网站的回头率. jquery.cookie.js 提供了jquery中非常简单的操作cookie的方法. $.cookie('the_cookie'); // 获得cookie $.cookie('the_cookie', 'the_value'); // 设置cookie $.cookie('the_

PHP Java 设置cookie方法

  Java Cookie cookie = new Cookie(COOKIE_NAME, encrypt_cookieV); cookie.setMaxAge(60 * 60); cookie.setPath("/"); response.addCookie(cookie); PHP setcookie($cookie_name,$cookie_value,time()+3600*1,'',$headers['HOST']) PHP Java 设置cookie方法,布布扣,bubu