繼上篇我們談論了celery的基本知識後,本篇繼續講解如何一步步使用celery構建分布式爬蟲。這次我們抓取的物件定為celery官方文件。
首先,我們新建目錄distributedspider
,然後再在其中新建檔案workers.py
,裡面內容如下
from celery import celery
# 官方推薦使用json作為訊息序列化方式
celery_timezone='asia/shanghai',
celery_enable_utc=true,
celery_accept_content=['json'],
celery_task_serializer='json',
celery_result_serializer='json',
)
import requests
from bs4 import beautifulsoup
def crawl(url):
print('正在抓取鏈結{}'.format(url))
resp_text = requests.get(url).text
soup = beautifulsoup(resp_text, 'html.parser')
return soup.find('h1').text
它的作用很簡單,就是抓取指定的url,並且把標籤為h1
的元素提取出來
最後,我們新建檔案task_dispatcher.py
,內容如下
url_list = [
'','',
'','',
'','',
'','',
'',''
]def manage_crawl_task(urls):
for url in urls:
if __name__ == '__main__':
manage_crawl_task(url_list)
這段**的作用主要就是給worker傳送任務,任務是tasks.crawl
,引數是url
(元祖的形式)
現在,讓我們在節點a(hostname為resolvewang的主機)上啟動worker
celery -a workers worker -c 2 -l info這裡
-c
指定了執行緒數為2,-l
表示日誌等級是info
。我們把**拷貝到節點b(節點名為wpm的主機),同樣以相同命令啟動worker,便可以看到以下輸出
可以看到左邊節點(a)先是all alone
,表示只有乙個節點;後來再節點b啟動後,它便和b同步了
sync with celery@wpm這個時候,我們執行給這兩個worker節點傳送抓取任務
python task_dispatcher.py可以看到如下輸出
可以看到兩個節點都在執行抓取任務,並且它們的任務不會重複。我們再在redis裡看看結果
可以看到一共有11條結果,說明tasks.crawl
中返回的資料都在db2(backend)中了,並且以json的形式儲存了起來,除了返回的結果,還有執行是否成功等資訊。
對微博大規模資料採集感興趣的同學可以關注一下分布式微博爬蟲,用用也是極好的
如何構建乙個分布式爬蟲 基礎篇
繼上篇我們談論了celery的基本知識後,本篇繼續講解如何一步步使用celery構建分布式爬蟲。這次我們抓取的物件定為celery官方文件。首先,我們新建目錄distributedspider,然後再在其中新建檔案workers.py,裡面內容如下 from celery import celery...
cola 乙個分布式爬蟲框架
python爬蟲是用python程式語言實現的網路爬蟲,主要用於網路資料的抓取和處理,相比於其他語言,python是一門非常適合開發網路爬蟲的程式語言,大量內建包,可以輕鬆實現網路爬蟲功能。python爬蟲可以做的事情很多,如搜尋引擎 採集資料 廣告過濾等,python爬蟲還可以用於資料分析,在資料...
爬蟲基礎 Scrapy Redis分布式爬蟲元件
scrapy是乙個框架,他本身是不支援分布式的。如果我們想要做分布式的爬蟲,就需要借助乙個元件叫做scrapy redis,這個元件正是利用了redis可以分布式的功能,整合到scrapy框架中,使得爬蟲可以進行分布式。可以充分的利用資源 多個ip 更多頻寬 同步爬取 來提高爬蟲的爬行效率。可以充分...