首頁  >  問答  >  主體

celery+redis+requests寫爬蟲該怎麼設計

我想用celery+redis+requests寫爬蟲,我自己測試了一下速度。採集url的狀態碼放入文件中。

from celery import Celery
import requests
app = Celery('tasks',
             broker = 'redis://localhost:6379/0',
             backend= 'redis://localhost:6379/1')

app.conf.CELERY_TASK_SERIALIZER = 'json'

@app.task
def page(url):
    p = requests.get(url).status_code
    file = open('result','a')
    file.write(str(p)+'\n')
    file.close()
    return p

結果很快就很滿意

/usr/bin/python2.7 /home/comboo/PycharmProjects/run.py
0.919842004776
Process finished with exit code 0

和單線程比較

34.3654260635

但是假如我輸出task的結果,就會變成單線程一個個取出結果

#coding:utf-8
import time

from tasks import page

url = 'http://www.baidu.com'
# print page.delay(url).get()
cent = time.time()
for line in range(100):
    code = page.delay(url)
    print code.get()
print time.time() - cent

就是任務之外只要有語句速度就會變慢。

現在造成的結果就是,我必須寫一個完整的任務,從請求到解析到下載,再到存入資料庫,透過celery來調度。
但是有時候我可能不想這樣做,例如寫入文件,我想一次全部寫入在關閉連接,而不是寫入一行關閉一次連接

有點長,謝謝大家了。

巴扎黑巴扎黑2755 天前742

全部回覆(0)我來回復

無回覆
  • 取消回覆