- Python 3.8.13
- Scrapy 2.6.2
- Scrapy-redis 0.7.3
- pymongo 4.2.0
- redis 4.3.4
- MongoDB
- Redis
- jinja2
- Echarts
- flask 2.2.2
参考:https://github.com/jhao104/proxy_pool进行配置。
---FlaskProject(数据可视化代码)
------static(用到的静态资源)
------templates(前端展示模板)
------app.py(后端代码)
------data.txt(爬取到的数据示例)
------wordCloud.py(生成词云代码)
---Master(主机端的代码)
------main.py(将数据从redis中取出,放入到MongoDB)
---Pic(运行效果图)
---proxy_pool(IP代理池)
---Slave(从机端的代码)
------movies
---------spiders
------------douban_redis.py(爬取数据的主要代码)
---------middlewares.py(中间件,实现IP代理、动态User-Agent等功能)
---------settings.py(爬虫的相关配置)
项目整体基于分布式的**设计,分为主机端代码和从机端代码。
从机负责执行爬虫程序,从网站爬取数据并存储到主机的Redis数据库中。Redis数据库可以记录爬取的url进度,因此爬虫程序可以中途暂停,从机数目可以任意设置,并且所有从机都执行相同的代码。
在进行项目测试的时候可以通过在一台电脑上配置虚拟机,从而实现分布式的效果。虚拟机推荐使用CentOS 7系统,系统轻量化、占用资源少。从机需要在settings.py
文件中设置主机的IP和端口。
从机环境配置完成后,cd到spiders
文件夹下运行:scrapy runspider douban_redis.py
命令可以启动从机程序,从机程序启动后会等待主机发放起始url。
主机负责维护Redis数据库,并将Redis数据库中的数据存储到MongoDB数据库中。
启动Redis服务后,在redis-cli.exe
中运行:lpush douban:start_urls https://movie.douban.com/top250
命令即可在Redis数据库中插入起始url,插入成功后从机会自动开始爬取程序。
主机端运行代理池proxy_pool
下的代码可获取免费代理IP,并存入redis
数据库中。
主机端的main.py用于实现取数据的功能,可以将Redis数据库中的数据取出,放入到MongoDB数据库中。
安装flask后,在主机端打开FlaskProject
文件,运行app.py
即可启动后端服务。启动后端服务后,在浏览器访问在本机默认IP:端口http://127.0.0.1:5000/
即可看到可视化效果。
项目参考:https://github.com/jhao104/proxy_pool
参考说明配置完环境后运行以下命令可以启动IP池程序。
# 启动调度程序
python proxyPool.py schedule
# 启动webApi服务
python proxyPool.py server