简陋的分布式爬虫(附项目代码地址)
哇咔咔,Python中文社区专栏作者。学习过C, C++, Python, 了解java,html, javascript基础。其中就Python而言,自己写过简单的博客(注册,登录,发帖,删帖,评论),写过几个爬虫。
新手向,基于Redis构建的分布式爬虫。 以爬取考研网的贴子为例,利用 PyQuery, lxml 进行解析,将符合要求的文章文本存入MySQ数据库中。
结构简介
cooperator
协作模块,用于为Master&Worker模块提供代理IP支持
master
提取满足条件的文章url,并交给Worker进一步处理
Worker
解析文章内容,将符合要求的存入数据库
环境依赖
sqlalchemy => 1.0.13 pyquery => 1.2.17 requests => 2.12.3 redis => 2.10.5 lxml => 3.6.0
需要预先安装MySQL-server 和 Redis-server.
MySQL中应有名为kybsrc的数据库,且该数据库包含一个名为posts的表,拥有num(INT AUTO_INCREMENT)和post(TEXT)两个字段。
如何启动
-
先配置好各模块所引用的配置文件
-
为了更好地运行,cooperator/start.py 应提前开始并完成一次工作函数执行
第一次执行完后,每五分钟运行一次工作函数
-
启动 master/start.py
默认只执行一次
-
启动 worker/start.py
默认循环监听是否有新的URL待解析
核心点说明
- 通过Redis的集合类型进行代理IP和URL的传递
# Summary Reference # --------- # 创建句柄 def make_redis_handler(): pool = redis.ConnectionPool(host=r_server['ip'], port=r_server['port'], password=r_server['passwd']) return redis.Redis(connection_pool=pool) # 获得句柄 def make_proxy_handler(): return make_redis_handler() # 保存到指定的set下 def check_and_save(self, proxy): 'pass' self.redis_handler.sadd(r_server['s_name'], proxy)
- 由于在验证代理IP和使用封装的get_url()函数的时候网络IO较多,所以使用多线程(效果还是很明显的)。
#Summary Reference #--------- def save_proxy_ip(self): 'pass' for proxy in self.proxy_ip: Thread(target=self.check_and_save, args=(proxy,)).start() def get_url(url): 'pass' while True: 'pass' resp = request('get', url, headers=headers, proxies={'http': proxy}) 'pass'
本文项目地址:https://github.com/PyCN/Ugly-Distributed-Crawler
原文地址:https://www.jianshu.com/p/f9e72c414419
相关推荐
-
Python机器学习笔记:SVM(3)——证明SVM,Python机器学习笔记:SVM(1)——SVM概述,Python机器学习笔记:SVM(2)——SVM核函数,Python机器学习笔记:SVM(3)——证明SVM,Python机器学习笔记:SVM(4)——sklearn实现 python基础
2020-6-11
-
python慎用os.getcwd() ,除非你知道【文件路径与当前工作路径的区别】 python基础
2020-6-11
-
Pycharm、IDEA等汉化教程 python基础
2019-8-16
-
Python 生成器原理详解 python基础
2018-2-3
-
用官方的SSD1306.py 驱动 OLED python基础
2020-7-4
-
python中的virtualenv命令集 python基础
2019-8-25
-
tf.metrics.sparse_average_precision_at_k 和 tf.metrics.precision_at_k的自己理解 python基础
2019-9-11
-
yield全面总结 python基础
2019-2-24
-
每周分享五个 PyCharm 使用技巧(二) python基础
2019-6-27
-
centos7分布式部署pyspider python基础
2019-8-25