feadper redis入库操作,以及主从分布

本文介绍了一种基于Feapder框架的分布式爬虫实现方法,包括使用Redis进行任务调度及MySQL存储爬取数据的过程。通过具体代码示例展示了如何创建爬虫类、发起请求、解析响应并处理数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

入库操作:

from feapder.db.redisdb import RedisDB

redis = RedisDB(ip_ports="localhost:6379", db=0)

redis.lpush("ke:l_test", 2)
#redis.lpush("l_test", 3)

print(redis.lrange("l_test"))
print(redis.lrem("l_test", 2))
print(redis.lrange("l_test"))


redos.zadd(_task_table, {"id": 1, "url": "https://www.baidu.com"})

 

 使用sql语句直接在navicat中创建表格

mysql使用SQL语句创建表 - 百度文库

简单的分布式爬虫

Created on 2021-02-08 16:06:12
---------
@summary:
---------
@author: Boris
"""

import feapder
from items import *


class TestSpider(feapder.Spider):
    def start_requests(self):
        for i in range(1):
            yield feapder.Request(f"https://www.baidu.com#{i}", callback=self.parse)

    def validate(self, request, response):
        if response.status_code != 200:
            raise Exception("response code not 200")  # 重试

        # if "哈哈" not in response.text:
        #     return False # 抛弃当前请求

    def parse(self, request, response):
        title = response.xpath("//title/text()").extract_first()  # 取标题
        item = spider_data_item.SpiderDataItem()  # 声明一个item
        item.title = title  # 给item属性赋值
        yield item  # 返回item, item会自动批量入库


if __name__ == '__main__':
    spider = TestSpider(redis_key="feapder3:test_spider", thread_count=100)
    spider.start()

这个要同时建立redis和mysql,因为redis_key存着网址。

【分布式爬虫】结果在redis中插入爬虫的运行状态,在mysql中插入爬虫返回的数据。

【任务爬虫】默认基本类有提交数据(url)到种子列表(可能是redis也可能是mysql),
后续的爬虫根据参数是要么是向redis中添加数据,要么是向根据网址向mysql中添加数据。
【批次爬虫】手动向mysql数据库中batch_spider_task表添加数据,

运行参数1:创建了一个batch_spider_batch_record表,添加爬虫运行记录到batch_spider_task表中。
运行参数2: 获得一个爬虫数据,提交到mysql库。

【爬虫集成】
爬虫参数1,(已经sql创建添加数据)mysql表中,redis自创一个表从mysql中弄一个任务过去。然后一个表记录爬虫名单。
爬虫参数2,那爬虫执行一个,那就删除一个记录,直到执行完为止。
 

### 如何使用 Flask 郑重部署机器学习模型的最佳实践 #### 一、概述 在现代软件工程中,将训练好的机器学习模型集成到生产环境中是一项重要任务。Flask 是一种轻量级的 Python Web 框架,因其简单易用而成为许多开发者的选择[^1]。以下是关于如何利用 Flask 构建一个高效的机器学习模型部署系统的最佳实践。 --- #### 二、准备工作 要开始部署工作,需先准备好必要的工具和环境配置: - **Python 环境**:确保已安装最新版本的 Python 和 pip 工具。 - **虚拟环境**:推荐使用 `virtualenv` 或者 `conda` 来隔离依赖项。 - **Flask 安装**:可以通过命令 `pip install flask` 进行安装[^2]。 - **模型文件管理**:提前保存好经过训练验证后的模型权重或参数文件(如 `.pkl`, `.h5`, `.pt` 等)[^3]。 --- #### 三、项目结构设计 合理的目录布局有助于提高项目的可维护性和扩展性。建议采用如下结构: ``` project/ │ ├── app.py # 主程序入口 ├── model/ # 存放模型及相关资源 │ └── trained_model.pkl ├── templates/ # HTML模板路径 │ └── index.html └── requirements.txt # 记录依赖包列表 ``` 其中,`trained_model.pkl` 表示已经序列化的机器学习模型;`templates/index.html` 则定义前端交互页面的内容[^4]。 --- #### 四、核心实现逻辑 下面详细介绍几个关键部分的具体编码方式。 ##### (1)加载预训练模型 通常情况下,在启动服务之前就需要把模型读取进来以减少每次请求时重复初始化的时间开销。例如基于 scikit-learn 的分类器可以这样处理: ```python import pickle from sklearn.externals import joblib # 加载模型 model_path = './model/trained_model.pkl' with open(model_path, 'rb') as file: loaded_model = pickle.load(file) def predict(input_data): """ 对输入数据进行预测 """ prediction = loaded_model.predict([input_data]) return prediction.tolist() ``` 如果涉及深度学习框架 PyTorch,则可能需要调整为 GPU 上运行的形式[^5]: ```python import torch from torchvision import models device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') class Net(torch.nn.Module): ... # 初始化网络实例并加载状态字典 net = Net().to(device) checkpoint = torch.load('./model/best_checkpoint.pth', map_location=device) net.load_state_dict(checkpoint['state_dict']) net.eval() def infer(image_tensor): with torch.no_grad(): output = net(image_tensor.to(device)) _, predicted_class = torch.max(output.data, dim=1) return int(predicted_class.item()) ``` ##### (2)搭建 RESTful 接口 为了让外部能够调用内部的服务功能,可通过定义不同的路由地址来接收 HTTP 请求消息。比如支持 POST 方法上传待测样本,并返回对应的类别标签或者概率分布情况。 ```python from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/predict', methods=['POST']) def make_prediction(): try: data = request.json["data"] # 获取 JSON 数据中的"data"字段作为特征向量 result = predict(data) # 调用前面编写的预测函数得到结果 response = {"status": "success", "prediction": result} except Exception as e: response = {"status": "error", "message": str(e)} finally: return jsonify(response), 200 # 将响应对象转换成JSON字符串形式发送回去 if __name__ == '__main__': app.run(host='0.0.0.0', port=8987, debug=True) ``` 注意这里的端口号可以根据实际情况修改,默认监听本地回环接口的所有 IP 地址[^5]。 ##### (3)构建用户友好型界面 虽然纯 API 形式的解决方案适用于某些特定场景下与其他系统对接的情况,但对于普通终端使用者来说还是不够直观友爱。因此还需要额外提供一套可视化的操作面板供他们填写必要信息之后一键提交即可获得反馈意见。 HTML 文件样例 (`index.html`) : ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Model Prediction</title> </head> <body> <h2>Predict Using Trained Model</h2> <form action="/predict" method="post"> Enter Feature Values (comma separated):<br><br> <textarea name="features" rows="4" cols="50"></textarea><br><br> <button type="submit">Submit</button> </form> <p id="result"></p> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> $(document).ready(function(){ $('form').on('submit', function(event){ event.preventDefault(); var formData = {}; $.each($('form').serializeArray(), function(i, field){ formData[field.name] = field.value; }); $.ajax({ url:'/predict', type:'POST', contentType:"application/json", dataType : "json", data:JSON.stringify({data:[].concat(formData.features.split(','))}), success:function(res){ $('#result').text(`Prediction Result:${res.prediction}`); }, error:function(err){ console.log(err); } }) }); }); </script> </body> </html> ``` 此代码片段展示了如何借助 jQuery 插件简化 AJAX 请求流程的同时保持良好的用户体验效果。 --- #### 五、测试与优化 完成初步开发后还需经历一系列严格的单元测试以及性能评估环节才能正式上线投入使用。常见的改进方向包括但不限于以下几个方面: - 并发能力增强; - 错误日志记录机制完善; - 输入校验规则制定等等。 --- ### 总结 综上所述,通过合理规划整个生命周期内的各个环节活动内容就可以顺利达成目标——即成功运用 Flask 技术栈高效便捷地对外分享自己的研究成果成果啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值