一个简单的分布式的知乎爬虫
2016-09-16 22:23
197 查看
源代码地址:https://github.com/WiseDoge/Spider_Hub/tree/master/ZhiHu
一个分布式的网络爬虫,用于抓取知乎的用户详细信息,包括用户名、行业、位置、毕业院校、介绍、关注者、关注人等。原理
主机负责分发任务。从起始位置开始,将当前用户的所有关注者提取出来,并压入
Redis任务队列,然后随机的进入到其中一个关注者的主页,
递归上述操作。
从机
负责抓取网页。连接至
Redis队列,从中取出一个用户的
URL,然后对
URL的内容进行抓取,并保存到
MongoDB中,然后
循环上述操作。
各模块功能
Master.py:主机的入口,包含了主机的抓取和去重策略。
Slave.py:从机的入口。
dbAPI.py:储存模块,用于将数据存入数据库。
login.py:登录模块,用于登录到知乎。
utils.py:工具模块。
Error.py:异常类模块。
setting.json:配置文件,用于设置数据库的Host和Port等。
需要额外安装的库
redis,用于连接Redispip3 install redis
pymongo,用于连接MongoDB
pip3 install pymongo
requests,用于向网站发送请求
pip3 install requests
BeautifulSoup,用于解析HTML
pip3 install bs4
lxml,配合BeautifulSoup使用,加快解析速度。
pip3 install lxml
PyInstaller(非必要,如果有需要的话)
pip3 install PyInstaller
该库用于将
.py文件打包为
.exe文件,这样就可以将从机运行在没有装
Python的PC机下了。
如果想要将从机打包,可以将文件夹定位在本目录,然后运行
pyinstaller -F Slave.py
需要额外安装的应用
Redis:用于构造任务队列。
MongoDB:用于存放抓取到的数据。
如果使用的是云数据库,可以不用在本地安装Redis和MongoDB。
Robomongo(非必须,但推荐安装):用于可视化管理MongoDB,便于查看数据。
需要配置的设置
需要在setting.json中配置好从机昵称,和数据库设置,如果使用的是本地服务,则无需配置。{ "user":"liu", "redis": { "host": "localhost", "port": 6379 }, "mongodb": { "host": "localhost", "port": 27017 } }
运行方法
数据库端打开Redis和MongoDB。
主机
需要准备一个知乎帐号。然后运行
python3 Master.py
从机
在
setting.py中设置一下从机的昵称(便于区分多个从机),然后运行
python3 Slave.py
一种推荐的部署方法
经过测试,一台主机大概可以保证30个左右的从机的URL供应,所以我们只需要一台计算机作为主机就够用了。在这里我推荐将主机和数据库分开部署,用一台单独的计算机作为Redis和MongoDB服务器(推荐使用阿里云、腾讯云等远程服务器),然后使用自己的计算机作为主机,其他的计算机作为从机。相关文章推荐
- 一个简单的分布式爬虫
- 一个简单java爬虫知乎某个话题下的照片
- 一个抓取知乎页面图片的简单爬虫
- 一个简单的多线程Python爬虫
- 一个简单的分布式新浪微博爬虫
- 项目分布式部署那些事(3):一个简单的分布式锁
- 使用Hprose制作一个简单的分布式应用程序
- 构建一个分布式操作系统的简单方案—答陈硕的“分布式系统中的进程标识”一文
- scrapy初探:写一个简单的爬虫
- 一个PHP实现的轻量级简单爬虫
- Python 用Redis简单实现分布式爬虫的方法
- 一个简单粗暴的爬虫 - 必应今日美图
- 一个简单的爬虫程序(爬取百度百科关于python的一千个页面)
- Java实现一个简单的网络爬虫
- 分布式消息队列RocketMQ&Kafka -- 消息的“顺序消费”-- 一个看似简单的复杂问题
- 用WebMagic框架写一个简单的爬虫
- 一个简单的爬虫实验
- 分布式消息队列RocketMQ&Kafka -- 消息的“顺序消费”-- 一个看似简单的复杂问题
- 一个简单的爬虫