Как запустить Scrapy Spider при отправке формы в фляге? - PullRequest
0 голосов
/ 26 апреля 2019

Я настраиваю приложение фляги, которое позволит мне вводить строку, и оно передаст этот строковый аргумент моему пауку для создания веб-страницы. У меня возникают проблемы с запуском паука по нажатию отправленной формы (включая скрабу и колбу).

Я рассмотрел следующие фрагменты кода безрезультатно: Выполнить Scrapy из колбы , Запуск Scrapy-пауков в задании на сельдерее , Скрап и сельдерей `update_state`

Определенно кажется, что есть разные способы выполнить задачу. Однако каждый из приведенных выше фрагментов кода не работает.

routes.py

from flask import render_template, flash, redirect, url_for, session, jsonify
from flask import request
from flask_login import login_required
from flask_login import logout_user
from app import app, db
from app.forms import LoginForm
from flask_login import current_user, login_user
from app.models import User
from werkzeug.urls import url_parse
from app.forms import RegistrationForm, SearchForm
#from app.tasks import scrape_async_job
import pprint
import requests
import json

@app.route('/')
@app.route('/index', methods=['GET','POST'])
@login_required
def index():
    jobvisuals = [
        {
            'Job': 'Example',
            'Desc': 'This job requires a degree...',
            'link': 'fakelink',
            'salary': '10$/hr',
            'applied': 'Boolean',
            'interview': 'Boolean'}]
    params = {
        'spider_name': 'Indeedspider',
        'start_requests': True
    }
    response = requests.get('http://localhost:9080/crawl.json', params).json()
    data = response
    pprint.pprint(data)
    form = SearchForm()
    if request.method == 'GET':
        return render_template('index.html', title='home', jobvisuals=jobvisuals, form=form, search=session.get('search',''))
    job_find = request.form['search']
    session['search'] = job_find
    if form.validate_on_submit():
        print('Working on this feature :D')
        flash('Searching for job {}').format(form.search.data)

    return render_template('index.html', title='Home', jobvisuals=jobvisuals, form=form)

паук

import scrapy

class IndeedSpider(scrapy.Spider):
    name = 'indeedspider'
    allowed_domains = ['indeed.com']

    def __init__(self, job='', **kwargs):
        self.start_url('http://www.indeed.com/jobs?q={job}&l=San+Marcos%2C+CA')
        super().__init__(**kwargs)

    def parse(self, response):
        for item in response.xpath("//div[contains(@class,'jobsearch-SerpJobCard unifiedRow row result clickcard')]").getall():
            yield {
                'title': item.xpath("//div[contains(@class,'title')]/text()").get(default='None'),
                'desc': item.xpath("//div[contains(@class,'summary')]/text()").get(default='None'),
                'link': item.xpath("//div[contains(@class,'title')]/@href").get(default='None'),
                'location': item.xpath("//span[contains(@class,'location')]/text()").get(default='None'),
                'salary': item.xpath("//div[contains(@class,'salarySnippet')]/text()").get(default='None')
            }

Ожидаемый:

Я набираю в поле ввода задание, задание передается пауку при отправке, паук выскабливает действительно.com и перетаскивает только первую страницу и возвращает эти данные на странице индекса.

Фактический: Не уверены, с чего начать.

Кто-нибудь может указать мне правильное направление?

...