Паук Scrapy не возвращает ответ при интеграции проекта Scrapy в приложение flask с помощью вязания крючком - PullRequest
0 голосов
/ 17 апреля 2020

Я новичок в области 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)

' ''

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...