Я настраиваю приложение фляги, которое позволит мне вводить строку, и оно передаст этот строковый аргумент моему пауку для создания веб-страницы. У меня возникают проблемы с запуском паука по нажатию отправленной формы (включая скрабу и колбу).
Я рассмотрел следующие фрагменты кода безрезультатно:
Выполнить 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 и перетаскивает только первую страницу и возвращает эти данные на странице индекса.
Фактический:
Не уверены, с чего начать.
Кто-нибудь может указать мне правильное направление?