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

作者: Python中文社区 | 来源:发表于2017-04-10 23:51 被阅读369次

    哇咔咔,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

    相关文章

      网友评论

        本文标题:简陋的分布式爬虫(附项目代码地址)

        本文链接:https://www.haomeiwen.com/subject/whaeattx.html