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 ...
随机推荐
- 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 ...
- 图片截取插件Cropper
自己仿照github上的例子写的demo,github上的例子太抽象了,自己写的最适合自己,通俗易懂. <!DOCTYPE html> <html> <head> ...
- 使用abcpdf将html转换成pdf文件
ABCpdf.NET使用介绍 最新做一个项目需要生成pdf文档以供打印,研究决定使用abcpdf这款组件,先针对其使用方法做一个简单的总结介绍以给有需要的朋友做参考. 一. ABCpdf.NET简单介 ...
- HDU 1160 FatMouse's Speed (最长上升子序列)
题目链接 题意:n个老鼠有各自的重量和速度,要求输出最长的重量依次严格递增,速度依次严格递减的序列,n最多1000,重量速度1-10000. 题解:按照重量递增排序,找出最长的速度下降子序列,记录序列 ...
- php登陆界面刷新验证码 javascript 的写法
<script type="text/javascript"> function refreshVerify(){ var imgId = document.getEl ...
- 原生的js实现jsonp的跨域封装
一.原理 jsonp是利用浏览器请求script文件时不受同源策略的限制而实现的,伪造一个script标签,将请求数据的url赋值给script的src属性,并将该标签添加到html中,浏览器会自动发 ...
- bootstrap-datetimepicker中设置中文
1.引入插件文件,同时引入相应的语言文件 <script src="bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.j ...
- Java学习笔记——继承、接口、多态
浮点数的运算需要注意的问题: BigDecimal operand1 = new BigDecimal("1.0"); BigDecimal operand2 = new BigD ...
- 【Tomcat】Tomcat容器 web.xml详解
Tomcat的安装目录下的conf目录下的web.xml文件有许多配置,例如: <init-param> <param-name>debug</param-name& ...
- 安裝HA服務
**************************************************************************************************** ...