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

包含了:

  • 从网页获取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. P2306 被yyh虐的mzc

    P2306 被yyh虐的mzc 容量为 \(V\), 有 \(n\) 件物品, 反正直接背包绝对超时 , 每个有重量和价值 \(a_{i}, b_{i}(a_{i}, b_{i} <= 10)\ ...

  2. 给Java新手的一些建议——Java知识点归纳(Java基础部分)

    原文出处:CSDN邓帅 写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些Java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行 ...

  3. 安装SQL Sever数据库失败的解决办法

    视频链接:https://www.bilibili.com/video/av12651739/ 我安装了SQL Sever2014.遇到了好多好多问题啊,整的我都快疯了.大致遇到的问题和解决办法如下. ...

  4. 编写可维护的js代码

    在工作中,制定一套统一的编码风格,可以提高开发效率,维护起来的也要容易很多,也能避免一些不必要的错误出现. 项目中常用的检查编码风格的工具JSLint.JSHint.JSCS.ESLint,,在这呢, ...

  5. noi题库(noi.openjudge.cn) 1.13编程基础之综合应用 T12 分数求和

    12:分数求和 描述 输入n个分数并对他们求和,并用最简形式表示.所谓最简形式是指:分子分母的最大公约数为1:若最终结果的分母为1,则直接用整数表示. 如:5/6.10/3均是最简形式,而3/6需要化 ...

  6. 蓝桥杯 算法提高 3000米排名预测 DFS 递归搜索 next_permutation()使用

    #include <iostream> #include <algorithm> #include <queue> #include <cstring> ...

  7. 通过xshell/securecrt连接linux上传/下载文件

    通过ssh等客户端连接远程linux总会有上传下载的需求,这里分别用Ubuntu和centos展示安装lrzsz软件的命令,使用命令是一致的,这里简单写 1.安装: centos:(注:参数-y中的意 ...

  8. 20155235 2016-2017-2 《Java程序设计》第5周学习总结

    20155235 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 第八章知识点 语法与继承结构 使用try.catch 异常继承结构 要抓还是要抛 贴心还是造 ...

  9. 网摘关于BarCodeControl控件

    简介 BarCodeControl是一个用户制作条形码的控件. MicrosoftBarcodeControl9.0是可以在MicrosoftOfficeAccess窗体和报表中显示条码符号的Acti ...

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

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