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

包含了:

  • 从网页获取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": "",
"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

scrapy 设置cookie池的更多相关文章

  1. scrapy设置"请求池"

    scrapy设置"请求池" 引言 相信大家有时候爬虫发出请求的时候会被ban,返回的是403错误,这个就是请求头的问题,其实在python发出请求时,使用的是默认的自己的请求头,网 ...

  2. python scrapy 把cookie并转化为字典的形式

    在用scrapy设置cookie的时候,需要从网页上对应的页面把cookie字段复制下来,并转化为字典的形式,下面代码是对cookie的转化过程 # -*- coding: utf-8 -*- cla ...

  3. cookie池的维护

    存储形式: 存储在redis中,“spider_name:username–password":cookie 建立py文件及包含方法: initcookies() 初始化所有账号的cooki ...

  4. python3简单使用requests 用户代理,cookie池

    官方文档:http://docs.python-requests.org/en/master/ 参考文档:http://www.cnblogs.com/zhaof/p/6915127.html#und ...

  5. Scrapy用Cookie实现模拟登录

    模拟登录是爬取某些站点内容的一个关键,有些网站(特别是论坛类),不登录的话,一个数据也拿不到. 模拟登录有这样几个关键: 弄清楚登录的url一些网站打开出现登录的页面,地址栏大多数不是登录提交表单的u ...

  6. 登陆后设置cookie的方法

    public void SetCookie(string userName, string role,string cookieValueName) {FormsAuthentication.Form ...

  7. Jquery设置Cookie

    jQuery代码: <script src="js/jquery-1.3.1.js" type="text/javascript"></scr ...

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

    JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的.而cookie是运行在客户端的,所以可以用JS来设置cookie. 假设有这样一种 ...

  9. JS设置cookie、读取cookie、删除cookie

    JS设置cookie.读取cookie.删除cookie       JS设置cookie,注意一定要path=/ ,根目录,不然其他目录可能查询不到..默认是本目录. document.cookie ...

随机推荐

  1. What Does “Neurons that Fire Together Wire Together” Mean?

    What Does “Neurons that Fire Together Wire Together” Mean? I’ve heard the phrase “neurons that fire ...

  2. 图片截取插件Cropper

    自己仿照github上的例子写的demo,github上的例子太抽象了,自己写的最适合自己,通俗易懂. <!DOCTYPE html> <html> <head> ...

  3. 使用abcpdf将html转换成pdf文件

    ABCpdf.NET使用介绍 最新做一个项目需要生成pdf文档以供打印,研究决定使用abcpdf这款组件,先针对其使用方法做一个简单的总结介绍以给有需要的朋友做参考. 一. ABCpdf.NET简单介 ...

  4. HDU 1160 FatMouse's Speed (最长上升子序列)

    题目链接 题意:n个老鼠有各自的重量和速度,要求输出最长的重量依次严格递增,速度依次严格递减的序列,n最多1000,重量速度1-10000. 题解:按照重量递增排序,找出最长的速度下降子序列,记录序列 ...

  5. php登陆界面刷新验证码 javascript 的写法

    <script type="text/javascript"> function refreshVerify(){ var imgId = document.getEl ...

  6. 原生的js实现jsonp的跨域封装

    一.原理 jsonp是利用浏览器请求script文件时不受同源策略的限制而实现的,伪造一个script标签,将请求数据的url赋值给script的src属性,并将该标签添加到html中,浏览器会自动发 ...

  7. bootstrap-datetimepicker中设置中文

    1.引入插件文件,同时引入相应的语言文件 <script src="bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.j ...

  8. Java学习笔记——继承、接口、多态

    浮点数的运算需要注意的问题: BigDecimal operand1 = new BigDecimal("1.0"); BigDecimal operand2 = new BigD ...

  9. 【Tomcat】Tomcat容器 web.xml详解

      Tomcat的安装目录下的conf目录下的web.xml文件有许多配置,例如: <init-param> <param-name>debug</param-name& ...

  10. 安裝HA服務

    **************************************************************************************************** ...