python爬蟲分布式獲取數(shù)據(jù)的實例方法
在我們進行衛(wèi)生大掃除的時候,因為工作任務較多,所以我們會進行分工,每個人負責不同的打掃項目。同樣分工合作的理念,在python分布式爬蟲中也得到了應用。我們需要給不同的爬蟲分配指令,讓它們去分頭行動獲取同一個網(wǎng)站的數(shù)據(jù)。那么這些爬蟲是怎么分工搜集數(shù)據(jù)的呢?感興趣的小伙伴,我們可以通過下面的示例進行解惑。
假設我有三臺爬蟲服務器A、B和C。我想讓我所有的賬號登錄任務分散到三臺服務器、讓用戶抓取在A和B上執(zhí)行,讓粉絲和關注抓取在C上執(zhí)行,那么啟動A、B、C三個服務器的celery worker的命令就分別是
celery -A tasks.workers -Q login_queue,user_crawler worker -l info -c 1 # A服務器和B服務器啟動worker的命令,它們只會執(zhí)行登錄和用戶信息抓取任務。
celery -A tasks.workers -Q login_queue,fans_followers worker -l info -c 1 # C服務器啟動worker的命令,它只會執(zhí)行登錄、粉絲和關注抓取任務。
然后我們通過命令行或者代碼(如下)就能發(fā)送所有任務給各個節(jié)點執(zhí)行了
# coding:utf-8
from tasks.workers import app
from page_get import user as user_get
from db.seed_ids import get_seed_ids, get_seed_by_id, insert_seeds, set_seed_other_crawled
@app.task(ignore_result=True)
def crawl_follower_fans(uid):
seed = get_seed_by_id(uid)
if seed.other_crawled == 0:
rs = user_get.get_fans_or_followers_ids(uid, 1
rs.extend(user_get.get_fans_or_followers_ids(uid, 2))
datas = set(rs)
# 重復數(shù)據(jù)跳過插入
if datas:
insert_seeds(datas)
set_seed_other_crawled(uid)
@app.task(ignore_result=True)
def crawl_person_infos(uid):
""
根據(jù)用戶i來爬取用戶相關資料和用戶的關注數(shù)和粉絲數(shù)(由于微博服務端限制,默認爬取前五頁,企業(yè)號的關注和粉絲也不能查看)
:param uid: 用戶id
:return:
"""
if not uid:
return
# 由于與別的任務共享數(shù)據(jù)表,所以需要先判斷數(shù)據(jù)庫是否有該用戶信息,再進行抓取
user = user_get.get_profile(uid)
# 不抓取企業(yè)號
if user.verify_type == 2:
set_seed_other_crawled(uid)
return
app.send_task('tasks.user.crawl_follower_fans', args=(uid,), queue='fans_followers',
routing_key='for_fans_followers')
@app.task(ignore_result=True)
def excute_user_task():
seeds = get_seed_ids()
if seeds:
for seed in seeds:
# 在send_task的時候指定任務隊列
app.send_task('tasks.user.crawl_person_infos', args=(seed.uid,), queue='user_crawler',
routing_key='for_user_info')
分布式爬蟲架構圖

到此這篇關于python爬蟲分布式獲取數(shù)據(jù)的實例方法的文章就介紹到這了,更多相關python爬蟲如何分布式獲取數(shù)據(jù)?內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
關于python3的ThreadPoolExecutor線程池大小設置
這篇文章主要介紹了關于python3的ThreadPoolExecutor線程池大小設置,線程池的理想大小取決于被提交任務的類型以及所部署系統(tǒng)的特性,需要的朋友可以參考下2023-04-04
Python Sqlite3以字典形式返回查詢結果的實現(xiàn)方法
下面小編就為大家?guī)硪黄狿ython Sqlite3以字典形式返回查詢結果的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10
python+opencv+caffe+攝像頭做目標檢測的實例代碼
今天小編就為大家分享一篇python+opencv+caffe+攝像頭做目標檢測的實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08

