摘要: 下面我们来看看,scrapy-redis的每一个源代码文件都实现了什么功能,最后如何实现分布式的爬虫系统: connection.py 连接得配置文件 defaults.py 默认得配置文件 dupefilter.py 去重规则 picklecompat.py 格式化 pipelines.py 序列 阅读全文
posted @ 2020-04-05 20:54 秋华 阅读(365) 评论(0) 推荐(0) 编辑
摘要: 一、调度器 配置 SCHEDULER = 'scrapy.core.scheduler.Scheduler' #表示scrapy包下core文件夹scheduler文件Scheduler类# 可以通过设置SCHEDULER值来使用自定义的调度器, 源码 import os import json i 阅读全文
posted @ 2020-04-05 20:52 秋华 阅读(2077) 评论(0) 推荐(1) 编辑
摘要: 写好自己的爬虫项目之后,可以自己定制爬虫运行的命令。 一、单爬虫 在项目的根目录下新建一个py文件,如命名为start.py,写入如下代码: from scrapy.cmdline import execute if __name__ == "__main__": execute(["scrapy" 阅读全文
posted @ 2020-04-05 20:07 秋华 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 通过scrapy提供的扩展功能, 我们可以编写一些自定义的功能, 插入到scrapy的机制中 一、编写一个简单的扩展 我们现在编写一个扩展, 统计一共获取到的item的条数我们可以新建一个extensions.py # extendsions.py # -*- coding: utf-8-*- fr 阅读全文
posted @ 2020-04-05 19:50 秋华 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 一、scrapy信号使用的简单实例 import scrapy from scrapy import signals from ccidcom.items import CcidcomItem class CcidcomSpider(scrapy.Spider): name = 'ccidcomSp 阅读全文
posted @ 2020-04-05 19:38 秋华 阅读(546) 评论(0) 推荐(0) 编辑
摘要: 一、爬虫中间件简介 图 1-1 图 1-2 开始这一张之前需要先梳理一下这张图, 需要明白下载器中间件和爬虫中间件所在的位置 下载器中间件是在引擎(ENGINE)将请求推送给下载器(DOWNLOADER)时会执行到的 当下载器(DOWNLOADER)完成下载后, 将下载的Response对象传回给引 阅读全文
posted @ 2020-04-05 18:36 秋华 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 下载器中间件是介于Scrapy的request/response处理的钩子框架,是用于全局修改Scrapy request和response的一个轻量、底层的系统。 1.激活Downloader Middleware 要激活下载器中间件组件,将其加入到 DOWNLOADER_MIDDLEWARES 阅读全文
posted @ 2020-04-05 18:13 秋华 阅读(282) 评论(0) 推荐(0) 编辑
摘要: Scrapy 使用了 Twisted 异步非阻塞网络库来处理网络通讯,整体架构大致如下(绿线是数据流向): Scrapy主要包括了以下组件: 引擎(Scrapy)用来处理整个系统的数据流处理, 触发事务(框架核心) 调度器(Scheduler)用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请 阅读全文
posted @ 2020-04-05 17:46 秋华 阅读(435) 评论(0) 推荐(0) 编辑
摘要: flash源码 def flash(message, category="message"): flashes = session.get("_flashes", []) # 从session中获取_flashes,没有则为空列表 flashes.append((category, message) 阅读全文
posted @ 2020-04-05 17:16 秋华 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 1. 信号(源码) 信号,是在flask框架中为我们预留的钩子,让我们可以进行一些自定义操作。 pip3 install blinker 2. 根据flask项目的请求流程来进行设置扩展点 中间件 # 代码示例 from flask import Flask,render_template app 阅读全文
posted @ 2020-04-05 16:30 秋华 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 1.示例代码 from flask import Flask app = Flask(__name__,static_url_path='/xx') @app.route('/index') def index(): return 'hello world 2.路由加载源码分析 2.1先执行rout 阅读全文
posted @ 2020-04-05 16:27 秋华 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 1.python之threading.local 当每个线程在执行 val.num=1 ,在内部会为此线程开辟一个空间,来存储 num=1 val.num,找到此线程自己的内存地址去取自己存储 num import time import threading val1 = threading.loc 阅读全文
posted @ 2020-04-05 16:12 秋华 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活。 flask的session机制 session是用来干什么的呢?由于http协议是一个无状态的协 阅读全文
posted @ 2020-04-05 11:34 秋华 阅读(330) 评论(0) 推荐(1) 编辑
摘要: 1原生session: from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from sqlalchemy应用.models import Users engine = create_engine( 阅读全文
posted @ 2020-04-05 11:33 秋华 阅读(780) 评论(0) 推荐(0) 编辑
摘要: class LoginForm(Form): #首先执行后得到的结果是UnboundField()对象 name=simple.StringField( label='用户名', validators=[ validators.DataRequired(message='用户名不能为空'), ], 阅读全文
posted @ 2020-04-05 11:30 秋华 阅读(486) 评论(0) 推荐(0) 编辑
摘要: 1.请求上下文和应用上下文入栈 # 将ctx入栈,但是内部也将应用上下文入栈 ctx.push() def push(self): # 获取到的 top == ctx top = _request_ctx_stack.top if top is not None and top.preserved: 阅读全文
posted @ 2020-04-05 10:58 秋华 阅读(530) 评论(0) 推荐(0) 编辑