运行 来自 Flask 应用程序的 scrapy
Run scrapy from Flask application
我有一个爬虫,每当有人去 link 时,我都想 运行。由于所有其他模块都在 Flask 中,我被告知也要在 Flask 中构建它。我已经在虚拟环境和全局机器上用 root 安装了 scrapy 和 selenium。
当我运行爬虫通过终端时,一切正常。当我启动 Flask 应用程序并在浏览器中访问 xx.xx.xx.xx:8080/whats
时,这也工作正常并且 运行 是我的爬虫并为我获取文件。但是一旦我上线,任何时候有人去link,它就会在浏览器中给我内部错误。
为了运行爬虫,我们必须在终端输入"scrapy crawl whateverthespidernameis"。我使用 Python 的 os
模块做到了这一点。
这是我的烧瓶代码:
import sys
from flask import request, jsonify, render_template, url_for, redirect, session, abort,render_template_string,send_file,send_from_directory
from flask import *
#from application1 import *
from main import *
from test123 import *
import os
app = Flask(__name__)
filename = ''
app = Flask(__name__)
@app.route('/whats')
def whats():
os.getcwd()
os.chdir("/var/www/myapp/whats")
//cmd = "scrapy crawl whats"
cmd = "sudo scrapy crawl whats"
os.system(cmd)
return send_file("/var/www/myapp/staticcsv/whats.csv", as_attachment =True)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8080,debug=True)
这是我运行 through live link:
时日志文件中记录的错误
sh: 1: scrapy: not found**
这是我在命令中使用sudo时记录在日志文件中的错误(变量cmd
):
sudo: no tty present and no askpass program specified**
我正在使用 uwsgi 和 nginx。
我如何 运行 这个爬虫,以便当任何人去 "xx.xx.xx.xx/whats" 爬虫 运行s 和 returns csv 文件时?
当您使用 sudo
时,shell 此启动将在 tty 上要求输入密码 - 它特别不会读取此信息的标准输入。由于 flask
和其他 Web 应用程序通常 运行 与终端分离,sudo
无法请求密码,因此它会寻找可以提供密码的程序。您可以在 this answer.
中找到有关此主题的更多信息
您找不到 scrapy
的原因很可能是因为您在测试中使用的交互式 shell 与 [=23] 的过程之间的 $PATH
存在差异=]宁flask
。解决此问题的最简单方法是在命令中提供 scrapy
程序的完整路径。
我有一个爬虫,每当有人去 link 时,我都想 运行。由于所有其他模块都在 Flask 中,我被告知也要在 Flask 中构建它。我已经在虚拟环境和全局机器上用 root 安装了 scrapy 和 selenium。
当我运行爬虫通过终端时,一切正常。当我启动 Flask 应用程序并在浏览器中访问 xx.xx.xx.xx:8080/whats
时,这也工作正常并且 运行 是我的爬虫并为我获取文件。但是一旦我上线,任何时候有人去link,它就会在浏览器中给我内部错误。
为了运行爬虫,我们必须在终端输入"scrapy crawl whateverthespidernameis"。我使用 Python 的 os
模块做到了这一点。
这是我的烧瓶代码:
import sys
from flask import request, jsonify, render_template, url_for, redirect, session, abort,render_template_string,send_file,send_from_directory
from flask import *
#from application1 import *
from main import *
from test123 import *
import os
app = Flask(__name__)
filename = ''
app = Flask(__name__)
@app.route('/whats')
def whats():
os.getcwd()
os.chdir("/var/www/myapp/whats")
//cmd = "scrapy crawl whats"
cmd = "sudo scrapy crawl whats"
os.system(cmd)
return send_file("/var/www/myapp/staticcsv/whats.csv", as_attachment =True)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8080,debug=True)
这是我运行 through live link:
时日志文件中记录的错误sh: 1: scrapy: not found**
这是我在命令中使用sudo时记录在日志文件中的错误(变量cmd
):
sudo: no tty present and no askpass program specified**
我正在使用 uwsgi 和 nginx。
我如何 运行 这个爬虫,以便当任何人去 "xx.xx.xx.xx/whats" 爬虫 运行s 和 returns csv 文件时?
当您使用 sudo
时,shell 此启动将在 tty 上要求输入密码 - 它特别不会读取此信息的标准输入。由于 flask
和其他 Web 应用程序通常 运行 与终端分离,sudo
无法请求密码,因此它会寻找可以提供密码的程序。您可以在 this answer.
您找不到 scrapy
的原因很可能是因为您在测试中使用的交互式 shell 与 [=23] 的过程之间的 $PATH
存在差异=]宁flask
。解决此问题的最简单方法是在命令中提供 scrapy
程序的完整路径。