我有一个爬虫,我希望每次有人进入链接时都会运行它。由于所有其他模块都在Flask中,我被告知要在Flask中构建它。我已经在虚拟环境中安装了scrapy和selenium,并在root用户机器上全局安装了scrapy和selen。
当我通过终端运行爬虫时,一切正常。当我启动Flask应用程序并在浏览器中访问xx.xx.xx.xx:8080/whats
时,这也可以正常运行我的抓取工具并获取文件。但是一旦我上线,所以当一个人进入链接时,它会在浏览器中给我内部错误。
为了运行抓取工具,我们必须输入" 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)
这是我在实时链接中运行时记录在日志文件中的错误:
sh: 1: scrapy: not found**
这是我在命令中使用sudo时记录在日志文件中的错误(变量cmd
):
sudo: no tty present and no askpass program specified**
我正在使用uwsgi和nginx。
如何运行此抓取工具,以便当有人进入" xx.xx.xx.xx / whats"爬虫运行并返回csv文件?
答案 0 :(得分:1)
当您使用sudo
shell时,它会在tty上请求密码 - 它特别不会读取此信息的标准输入。由于flask
和其他Web应用程序通常从终端分离运行,sudo
无法请求密码,因此它会查找可以提供密码的程序。您可以在this answer中找到有关此主题的更多信息。
您未找到scrapy
的原因很可能是因为您在测试中使用的交互式shell与正在运行的进程$PATH
之间的flask
存在差异。解决这个问题的最简单方法是在命令中提供scrapy
程序的完整路径。