粗末な分布式爬虫類

1967 ワード

Ugly-Distributed-Crawler
まず、プロジェクト構造をざっと見てみることをお勧めします.
プロジェクト紹介
初心者向け、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という名前のデータベースで、num(INT AUTO_INCREMENT)とpost(TEXT)の2つのフィールドを持つpostsというテーブルが含まれています.

  • 起動方法
    0.各モジュールが参照するプロファイルを設定する
    1.よりよく動作ためにcooperator/start.pyは、作業関数の実行を事前に開始し、完了する必要があります.
    1回目の実行が完了したら、5分ごとに作業関数を実行します.
    2.master/startを起動する.py
    デフォルトでは1回のみ実行されます
    3.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)
    

    2.検証エージェント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/A1014280203/Ugly-Distributed-Crawler
    何か問題があったら私に連絡してください(微信:smartseer)