分布式:
架构方式
多台真实机器+爬虫(如requests,scrapy等)+任务共享中心
多台虚拟机器(或者部分虚拟部分真实)+爬虫(如requests,scrapy等)+任务共享中心
多台容器级虚拟化机器(或者部分真实机器)+爬虫(如requests,scrapy等)+任务共享中心
docker+redis+requests+(mysql)
docker+redis+scrapy+scrapy-redis+r(mysql)
中心节点:任务控制-通信redis,数据存储mysql
rconn=redis.Redis(“118.31.46.101″,”6379”) #连接中心节点redis
for i in range(0,5459058):
isdo=rconn.hget(“url”,str(i))
if(isdo!=None): #先取出当前url判断是否爬取过
continue
rconn.hset(“url”,str(i),”1″) #如没有爬过,先把url标记
try:
data=urllib.request.urlopen(“http://www.17k.com/book/”+str(i)+”.html”).read().decode(“utf-8″,”ignore”)
except Exception as err:
print(str(i)+”—-“+str(err))
continue
pat=”
rst=re.compile(pat,re.S).findall(data)
if(len(rst)==0):
continue
name=rst[0]
print(str(i)+”—–“+str(“ok”))
rconn.hset(“rst”,str(i),str(name)) #当前url爬完后,把数据保存
scrapy-redis
pip3 install scrapy-redis
scrapy-redis中queue三种方式:
SpiderQueue = FifoQueue #先进先出
SpiderStack = LifoQueue #后进先出
SpiderPriorityQueue = PriorityQueue #优先队列,默认
scrapy-redis分布式部署:
中心节点安装redis,(mysql)
各子节点均安装python,scrapy,scrapy-redis,python的redis模块,(pymysql)
将修改后的分布式Crawler项目部署到每个子节点
[En]
Deploy the modified distributed crawler project to each child node
每个子节点分别运行分布式爬虫项目。
[En]
Each child node runs the distributed crawler project respectively.
一.修改爬虫文件
1.导入scrapy-redis模块:from scrapy_redis.spiders import RedisSpider
2.将当前爬虫类的父类修改成RedisSpider
3.将allowed_domains和start_urls进行删除
4.添加一个新的属性redis_key = ‘xxx’,该属性值表示的就是可以被共享的调度器队列的名称
二.进行配置文件的配置
1.保证爬虫文件发起的请求都会被提交到可以被共享的调度器的队列中
SCHEDULER = “scrapy_redis.scheduler.Scheduler”
2.保证爬虫文件提交的item会被存储到可以被共享的管道中
ITEM_PIPELINES = {
‘scrapy_redis.pipelines.RedisPipeline’: 400
3.配置最终数据存储的redis数据库
REDIS_HOST = ‘redis服务的ip地址’
REDIS_PORT = 6379
REDIS_ENCODING = ‘utf-8’
REDIS_PARAMS = {‘password’:’123456dj’}
4.redis数据库的配置文件进行配置:关闭保护模式和注释掉bind 127.0.0.1
5.开启redis服务和客户端
6.执行爬虫文件:scrapy runspider xxx.py
7.向调度器队列中仍入一个起始的url:
settings:
使用的是可以被共享的调度器
增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化
DUPEFILTER_CLASS = “scrapy_redis.dupefilter.RFPDupeFilter”
使用scrapy-redis组件自己的调度器
SCHEDULER = “scrapy_redis.scheduler.Scheduler”
配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set。如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据
SCHEDULER_PERSIST = True
使用scrapy-redis中封装好的可以被共享的管道
ITEM_PIPELINES = {
‘scrapy_redis.pipelines.RedisPipeline’: 400
配置redis
REDIS_HOST = ‘127.0.0.1’
REDIS_PORT = 6379
REDIS_ENCODING = ‘utf-8’
REDIS_PARAMS = {‘password’:’123456′}
Original: https://blog.csdn.net/weixin_39554290/article/details/113398158
Author: weixin_39554290
Title: scrapy-redis mysql_Scrapy-redis 分布式
相关阅读
Title: Vue前后台数据交互实例演示,使用axios传递json字符串、数组
Vue 前后台数据交互实例演示
[ 推荐文章 ]
Python 地图篇 – 使用 pyecharts 绘制世界地图、中国地图、省级地图、市级地图实例详解
第一章:后台实现
① Python 启用 Flask 服务器
后端使用 python 启用一个 flask 服务器。
将数组封装在 json 字符串里进行发送,前台直接在 json 字符串里读数据就行。
import flask
app = flask.Flask(__name__)
@app.route('/get_data')
def get_data():
json_data = {
"data1":[48, 57, 55, 80, 67, 67, 29, 19,20,15,5,11,3,100,190],
"data2":[1, 57, 55, 300, 67, 67, 29, 19,20,15,5,11,3,10,190]
}
return json_data;
host_ip = "127.0.0.1"
host_port = 15004
app.run(host = host_ip, port = host_port)
② 后台启用成功验证
启动后样式,下面的两行 200 是 2 个请求记录。

通过
http://127.0.0.1:15004/get_data
访问浏览器看看后台是否成功启用。
; 第二章:前台实现
① Vue 使用 Axios 实现接收 json 字符串、数组数据
我们首先 npm install axios
安装 axios。
其中的 response.data
就是后端发送的 json 字符串数据, response.data.data1
就是数组 1。
注意 axios 使用前需要 import axios from 'axios'
导入下。
想自己验证的话可以把里面更新表格数据的内容注释掉,看看提示框能不能显示出数据。
<input type="button" @click="get_data()" value="点击同步数据" />
<script>
import axios from 'axios';
export default {
methods:{
set_charts(data){
alert("数组1:"+data.data1+"\n"+"数组2:"+data.data2);
let lineData = { ...this.lineChartData };
lineData.datasets.forEach(dataset => {
dataset.data = data.data1;
})
this.lineChartData = lineData;
},
get_data(){
axios
.get('http://127.0.0.1:15004/get_data')
.then(response => {
this.set_charts(response.data);
})
.catch(function (error) {
console.log(error);
});
}
}
}
② 前台接收数据演示
这是演示的效果图,可以看到我们增加的按钮还有个预置的表格,点击一下按钮。

可以看到提示框展示的就是我们后台发送的数据。

提示框关掉后,可以看到表格里的数据也同步过来了。

喜欢的点个赞❤吧!
Original: https://blog.csdn.net/qq_38161040/article/details/123721332
Author: 挣扎的蓝藻
Title: Vue前后台数据交互实例演示,使用axios传递json字符串、数组
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/354683/
转载文章受原作者版权保护。转载请注明原作者出处!