我有一个爬行器,我想每次运行一个人去链接。 由于所有其他模块都在Flask中,所以我被告知在Flask中也可以创build它。 我已经在虚拟环境中安装了scrapy和selenium,并且在机器上全局安装了root。
当我通过terminal运行爬行器时,一切正常。 当我启动Flask应用程序并访问浏览器中的xx.xx.xx.xx:8080/whats
时,这也可以正常运行,并运行我的搜寻器并获取文件。 但是,只要我上线,任何时候一个人去链接,它给我在浏览器内部错误。
为了运行爬虫,我们必须在terminal中键入“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)
这是我运行实时链接时logging在日志文件中的错误:
sh: 1: scrapy: not found**
这是在命令(variablescmd
)中使用sudo时logging在日志文件中的错误:
sudo: no tty present and no askpass program specified**
我正在使用uwsgi和nginx。
我怎样才能运行这个爬虫,当任何人去“xx.xx.xx.xx /什么”爬虫运行,并返回csv文件?
当你使用sudo
这个shell会启动会在tty上要求输入一个密码 – 它不会读取这个信息的标准输入。 由于flask
和其他Web应用程序通常会从终端运行, sudo
无法要求输入密码,所以它会查找可以提供密码的程序。 你可以在这个答案中找到关于这个主题的更多信息。
您没有找到scrapy
的原因很可能是因为您在测试中使用的交互式shell与运行flask
的进程之间的$PATH
差异。 解决这个问题的最简单方法就是在命令中给出scrapy
程序的完整路径。