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的架構。