Redisベースの単純分布爬虫類
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の転送
2.検証エージェントIPとパッケージを使用するget_url()関数の場合はネットワークIOが多いので、マルチスレッドを使用します(効果はまだ明らかです).
プロジェクトアドレス
プロジェクト構造
何か問題があったら私に連絡してください(微信:smartseer)
まずざっと見てみることをお勧めします
プロジェクト紹介
初心者向け、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
起動方法
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'
プロジェクトアドレス
プロジェクト構造
何か問題があったら私に連絡してください(微信:smartseer)