CrawlerRunner () не проходит через файл конвейера scrapy - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь вызвать scrapy spider из Django файла Views.py. Паук действительно вызывается, но его вывод отображается в командной строке и не сохраняется в Django моделях для отображения на странице. Я проверил запускать spider отдельно, чтобы убедиться, что scrapy и Django подключены и работает правильно, но при автоматизации с использованием скрипта CrawlerRunner () этого не происходит. Так что в реализации CrawlerRunner () отсутствует файл из Django views.py файла , Ниже приведен файл Django Views.py, который вызывает паука:

@csrf_exempt
@require_http_methods(['POST', 'GET'])
def scrape(request):
import sys
from newscrawler.spiders import news_spider
from newscrawler.pipelines import NewscrawlerPipeline
from scrapy import signals
from twisted.internet import reactor
from scrapy.crawler import Crawler,CrawlerRunner
from scrapy.settings import Settings
from scrapy.utils.project import get_project_settings
from scrapy.utils.log import configure_logging
from crochet import setup

setup()
configure_logging()

runner= CrawlerRunner(get_project_settings())
d=runner.crawl(news_spider.NewsSpider)

return redirect("../getnews/")

Мой паук выполняет работу по сканированию новостного веб-сайта и сохраняет URL-адрес, изображение и заголовок главных новостей. сохраняя эти три поля в файле models.py, он печатает в cmd. Кто-нибудь может помочь?

Файл из скрапа

import scrapy
from scrapy_djangoitem import DjangoItem

import sys

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'News_Aggregator.settings'

from news.models import Headline

class NewscrawlerItem(DjangoItem):
    # define the fields for your item here like:
    django_model = Headline

Файл с конвейерами

class NewscrawlerPipeline(object):
    def process_item(self, item, spider):
        print("10000000000000000")
        item.save()
        return item

1 Ответ

0 голосов
/ 08 февраля 2020

Я понял, что CrawlerRunner не смог получить доступ к файлу настроек моего проекта scrapy, который мог включить pipelines.py для scrapy, что, в свою очередь, позволило бы сохранить данные в Django файле MOdels. Измененный код файла views.py django, который вызывает spider:

import os
import sys
from newscrawler.spiders import news_spider
from newscrawler.pipelines import NewscrawlerPipeline
from scrapy import signals
from twisted.internet import reactor
from scrapy.crawler import Crawler,CrawlerRunner
from scrapy.settings import Settings
from scrapy.utils.project import get_project_settings
from newscrawler import settings as my_settings 
from scrapy.utils.log import configure_logging
from crochet import setup

@csrf_exempt
@require_http_methods(['POST', 'GET'])
def scrape(request):
    Headline.objects.all().delete()
    crawler_settings = Settings()

    setup()
    configure_logging()
    crawler_settings.setmodule(my_settings)
    runner= CrawlerRunner(settings=crawler_settings)
    d=runner.crawl(news_spider.NewsSpider)
    time.sleep(8)
    return redirect("../getnews/")

Надеюсь, что это поможет любому, кто хочет вызвать scrapy spider из файла django views.py и сохранить очищенные данные в Django Models. Спасибо 1004 *

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