天天看點

Scrapy周期性爬取(解決Unknown command: crawl報錯)

Scrapy架構(1.2.0)并沒有直接周期性爬取的指令,而且如果配置不當,會導緻Unknown command: crawl的報錯,配置周期執行并不簡單,是以這篇部落格解決這個問題,一勞永逸。

思路是:調用linux的定時任務定時執行一個啟動架構的python檔案

目錄:

1 使用python程式啟動scrapy

2 使用Linux腳本啟動python并配置定時任務

1 使用python程式啟動scrapy

在編寫完爬蟲程式之後,我們的Scrapy目錄結構是這樣的:

Scrapy項目根路徑
    |Scrapy檔案:
        |spiders
        |items.py
        |pipelines.py
        |....
    |scrapy.cfg
           

在Scrapy檔案中建立一個python檔案,作為啟動架構的打火機,這裡舉例,使用main.py檔案,添加後的目錄結構是:

Scrapy項目根路徑
    |Scrapy檔案:
        |spiders
        |items.py
        |pipelines.py
        |....
        |main.py
    |scrapy.cfg
           

代碼是:

mport sys
import os
from scrapy.cmdline import execute

def start_scrapy():
    try:
        sys.path.append(os.path.dirname(os.path.abspath(__file__)))
        execute(['scrapy', 'crawl', 'xinwen_spider'])
    except Exception as e:
        print(e)

start_scrapy()
           

2 使用Linux腳本啟動python并配置定時任務

在Scrapy項目根路徑下建立一個 exec_spider.sh 的腳本,建立後的項目路徑是:

Scrapy項目根路徑
    |Scrapy檔案:
        |spiders
        |items.py
        |pipelines.py
        |....
        |main.py
    |scrapy.cfg
    |exec_spider.sh
           

使用vim編輯的内容是:

# 一定要先 cd 到 main.py 的目錄下,然後再執行 main.py
cd /srv/Scrapy項目根目錄/Scrapy檔案/
python main.py
           

然後為這個腳本添加執行權限:

chmod +x exec_spider.sh
           

最後一步,添加到Linux定時任務

crontab -e
           

在最後一行添加:

*/30 * * * * /bin/bash /srv/Scrapy項目根目錄/execute_xinwen.sh >> /srv/Scrapy項目根目錄/Scrapy檔案/scrapy_log.txt
           

上面的例子是每30分鐘執行一次,如果對 Linux 的 crontab 服務不熟悉的話可以看這篇部落格:https://blog.csdn.net/weixin_35757704/article/details/89227896#4.%E6%9B%B4%E5%8A%A0%E5%A4%8D%E6%9D%82%E7%9A%84%E9%85%8D%E7%BD%AE

注意這裡要用絕對路徑,">>" 後面是日志檔案,如果有報錯會顯示在裡面,而如果沒有報錯,裡面會相對比較幹淨,scrapy的日志并不會記錄在裡面,是以盡量提前調試好scrapy的架構。

繼續閱讀