简陋的分布式爬虫(附项目代码地址)

哇咔咔,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)两个字段。

如何启动

  1. 先配置好各模块所引用的配置文件

  2. 为了更好地运行,cooperator/start.py 应提前开始并完成一次工作函数执行

    第一次执行完后,每五分钟运行一次工作函数

  3. 启动 master/start.py

    默认只执行一次

  4. 启动 worker/start.py

    默认循环监听是否有新的URL待解析

核心点说明

  1. 通过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)
  1. 由于在验证代理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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,131评论 19 139
  • =========================================================...
    lavor阅读 3,516评论 0 5
  • Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化...
    Evtion阅读 5,937评论 12 18
  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,834评论 24 1,002
  • 1 前言 作为一名合格的数据分析师,其完整的技术知识体系必须贯穿数据获取、数据存储、数据提取、数据分析、数据挖掘、...
    whenif阅读 18,121评论 45 523