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": "",
"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池的更多相关文章
- scrapy设置"请求池"
scrapy设置"请求池" 引言 相信大家有时候爬虫发出请求的时候会被ban,返回的是403错误,这个就是请求头的问题,其实在python发出请求时,使用的是默认的自己的请求头,网 ...
- python scrapy 把cookie并转化为字典的形式
在用scrapy设置cookie的时候,需要从网页上对应的页面把cookie字段复制下来,并转化为字典的形式,下面代码是对cookie的转化过程 # -*- coding: utf-8 -*- cla ...
- cookie池的维护
存储形式: 存储在redis中,“spider_name:username–password":cookie 建立py文件及包含方法: initcookies() 初始化所有账号的cooki ...
- python3简单使用requests 用户代理,cookie池
官方文档:http://docs.python-requests.org/en/master/ 参考文档:http://www.cnblogs.com/zhaof/p/6915127.html#und ...
- Scrapy用Cookie实现模拟登录
模拟登录是爬取某些站点内容的一个关键,有些网站(特别是论坛类),不登录的话,一个数据也拿不到. 模拟登录有这样几个关键: 弄清楚登录的url一些网站打开出现登录的页面,地址栏大多数不是登录提交表单的u ...
- 登陆后设置cookie的方法
public void SetCookie(string userName, string role,string cookieValueName) {FormsAuthentication.Form ...
- Jquery设置Cookie
jQuery代码: <script src="js/jquery-1.3.1.js" type="text/javascript"></scr ...
- 运用JS设置cookie、读取cookie、删除cookie
JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的.而cookie是运行在客户端的,所以可以用JS来设置cookie. 假设有这样一种 ...
- JS设置cookie、读取cookie、删除cookie
JS设置cookie.读取cookie.删除cookie JS设置cookie,注意一定要path=/ ,根目录,不然其他目录可能查询不到..默认是本目录. document.cookie ...
随机推荐
- python 中__getitem__ 和 __iter__ 的区别
# -*- coding: utf-8 -*- class Library(object): def __init__(self): self.books = { 'title' : 'a', 'ti ...
- python 启航
first = 1while first<=9: sec = 1 while sec <= first: print( str(sec)+"*&qu ...
- NLP分词
英文分词: #英文分词 import nltk sentence="hello,world" tokens=nltk.word_tokenize(sentence) print(t ...
- 笔记 oracle 创建主键自增长
笔记 (1) 创建表 create table test( id number(18,2) primary key, -- 主键(unique+not null) name varchar2(100) ...
- 一篇很棒的 MySQL 触发器学习教程
一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动 ...
- [hadoop]mapreduce原理简述
1.用于map的输入,先将输入数据切分成相等的分片,为每一个分片创建一个map worker,这里的切片大小不是随意订的,一般是与HDFS块大小一致,默认是64MB,一个节点上存储输入数据切片的最大s ...
- 一步一步搭建11gR2 rac+dg之配置单实例的DG(八)【转】
RAC主库配置单实例ActiveDataguard 本文文档结构: 这里配置的过程中需要注意的一项是多看看rac1和rac2以及dg的告警日志会对配置过程有更深刻的理解...配置oracle rac的 ...
- 使用脚本实现killproc的功能
在shell提示符号下输入type killproc,会发现killproc实在 /sbin/目录下,通过man killproc可以查看这个脚本(姑且这么称为脚本)的用法,现在,把这个脚本的实现过程 ...
- SSD固态硬盘检测工具AS SSD参数
一. 使用AS SSD Benchmark进行查看 包括了4个方面的测试(顺序读写.4K随机读写.64线程4K读写.寻道时间) AS SSD的主要测试,也是网上最常见得到测试成绩的,是它主界面上持续. ...
- Python基础(1):dir(),help()
Python:3.6.4 开始编写Python程序了...可是,某个模块怎么用呢?模块里的函数怎么用呢?...使用本文介绍的dir().help()两个帮助函数可以 获得绝大部分开发所需要的信息! d ...