Я новичок в области scrapy flask, у меня есть проект scrapy, который я бы интегрировал в приложение flask, используя вязание крючком. Мой паук (загрузочный файл) получает URL-адрес веб-страницы и имя файла в качестве параметров и сохраняет страницу в файл html в папке шаблонов в рамках проекта flask.
URL-адрес страницы задается пользователь, использующий приложение flask после нажатия кнопки «Отправить», вызывает паука, но файл не создается в шаблонном фолдере после выполнения паука. любая помощь, пожалуйста
Код паука:
'' '
from scrapy import Spider
from scrapy.selector import Selector
import json
from urllib.parse import urlparse
class loadPage(Spider):
name = "loadfile"
start_urls = []
custom_settings = {
'DOWNLOADER': 'scrapy.core.downloader.Downloader'
}
def __init__(self, url='', filename='file.html', **kwargs):
self.start_urls.append(url)
self.filename = "../templates/"+ filename
super().__init__(**kwargs)
def parse(self, response):
with open(self.filename, 'wb') as f:
f.write(response.body)
self.log('Saved file %s' % self.filename)
' '' flask app.py файл:
'' '
from flask import Flask, render_template , escape
from crochet import setup, run_in_reactor, retrieve_result, TimeoutError
import crochet
from flask import Flask , render_template, jsonify, request, redirect, url_for
from scrapy import signals
from scrapy.crawler import CrawlerRunner
import time
from urllib.parse import urlparse
from twisted.internet import reactor
from SCRAPER.SCRAPER.spiders.loadPage import loadPage
crochet.setup()
app = Flask(__name__)
crawl_runner = CrawlerRunner()
@app.route("/")
def main():
return render_template('index.html')
@app.route('/', methods=['POST'])
def submit():
if request.method == 'POST':
s = request.form['url']
global url
url = s
global filename
filename = (urlparse(url).netloc).split('.')[0] + '.html'
return redirect(url_for('scrape'))
@app.route("/scrape")
def scrape():
result = scrape_with_crochet(url, filename)
try:
download = result.wait(timeout=18)
return "Downloaded: " + escape(download)
except TimeoutError:
return "Download in progress..."
@run_in_reactor
def scrape_with_crochet(baseURL,filename):
result = crawl_runner.crawl(loadPage, url = baseURL, filename= filename)
return result
if __name__ == "__main__":
app.run(debug=True)
' ''