设计原因
刷阅读量,写写小爬虫,给自己的博客刷刷阅读量等等,直接用电脑刷吧,估计IP分分钟被封。所以只能通过不停的更换IP来进行刷流量,反正家里的网络反正是闲着的。
设计方案
python主要用的是celery
分布式队列。利用redis
做数据存储,采用gevent
做协程并发。
学习资料
-
cdlery
1.定时每天抓取代理网站的IP地址。 2.定时每天(2次)对IP地址进行测试等待时间过长给予删除,对于超时的IP进行剔除。
-
redis
1.缓存IP,并且设置存储超时时间。
- 程序调用
1.编写python脚本,直接调用redis里面的IP,并且进行使用,如发现IP地址出现超时的情况,直接从redis内部清除。
大致的逻辑拓扑图如下:
逻辑拓扑
作为一个菜鸟,还是需要严格的按照程序的设计方式来进行。
开发环境搭建:
- 运行
cmd
-bash
打开windows下linux环境。 -
mkdir ipserver
创建文件夹。 -
pipenv install
创建虚拟变量环境,会在目录下创建2个文件Pipfile,Pipfile.lock。 - 开始安装python插件包
pipenv install gevent celery redis BeautifulSoup4 requests
。 - 在项目内开始创建文件夹core,bin,log,celerymanager。
-
安装redis数据库,直接从官网下载源码安装即可。
ls目录查看如下
正式环境搭建完成后创建py文件。
先做一个简单的测试测试是否可用。
目录如下
#run_celery.py
from __future__ import absolute_import,unicode_literals
from celery import Celery
app = Celery(
'manager',#名称
broker='redis://127.0.0.1:6379/0',#任务建立
backend='redis://127.0.0.1:6379/1',#任务反馈
include=['celerymanager.tasks'])#可添加多个任务
if __name__ == '__main__':
app.start()
#tasks.py
from __future__ import absolute_import,unicode_literals
#导入app
from run_celery import app
#(以装饰器的方式)
@app.task
def add(x,y):
return x+y
启动测试:
进入项目内输入命令启动celery分布式队列:
pipenv run celery -A run_celery worker --loglevel=info
查看启动正常,并且tasks内存在add函数。
启动正常
在启动pipenv run python3
输入命令测试:
>>> from celerymanager.tasks import add
>>>
>>>
>>> add.delay(4,5)
<AsyncResult: c6031cea-10e4-411f-99c6-430b2674ff3d>
>>> res = add.delay(4,5)
>>> res.get()
测试分布式队列正常,查看redis内的数据正常。
数据正常
项目正式开始编写。
网友评论