Запуск скрипта Python с импортом scrapy из дочернего процесса Node - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь запустить простой скребок для сбора данных и хотел бы использовать Python Scrapy. Остальная часть приложения будет через Nodejs / Express, поэтому я хотел бы вызывать этот скрипт по требованию, когда мне нужны свежие / новые данные.

Код python прекрасно работает локально через piecharm, но я вижу проблемы, когда он запускается как скрипт.

  1. Через узел, когда я запускаю сервер локально и нажимаю / имя, он выходит из строя с «ни одним модулем с именем« scrapy »
  2. Когда я запускаю сервер через приглашение Anaconda, это работает нормально, и scrap импортируется без ошибок.
  3. Я установил scrapy через conda в месте, где экспресс-сервер работает как для 1, так и для 2.

Из того, что я прочитал, это может быть связано с необходимостью использования скрученного реактора Twisted, но, поскольку я новичок в Python, мне не ясно, что терминал anaconda делает по-другому, и что мне нужно будет сделать правильно со стороны узла, чтобы использовать scrapy.

Nodejs:

app.get('/name', callName);
function callName(req, res) {
  console.log("test");
  var spawn = require('child_process').spawn;
  const pyProg = spawn('python', ['pythonscript.py']);

  pyProg.stdout.on('data', function(data) {

      console.log(data.toString());
      res.write(data);
      res.end('end');
  });
}    


//Print URL for accessing server
console.log('Server running at http://127.0.0.1:8000/')

app.listen(process.env.PORT || 8000, () => console.log("Listening on " + (process.env.PORT || 8000)));

Скрипт Python:

try:
    import sys
    import scrapy
    data = "python starting"
    print(data)
    sys.stdout.flush()
except Exception as exception:
    print(exception, False)
    print(exception.__class__.__name__ + ": " + exception.message)

Обновление: При запуске импорта scrapy от интерпретатора Anaconda (другой из комментариев привел к «модуль не найден»)

Traceback (последний вызов был последним): Файл "", строка 1, в Файл "\ Anaconda3 \ lib \ site-packages \ scrapy__init __. Py", строка 34, в от scrapy.spiders импорт Spider Файл "\ Anaconda3 \ lib \ site-packages \ scrapy \ spiders__init __. Py", строка 10, в от scrapy.http Запрос на импорт Файл "\ Anaconda3 \ lib \ site-packages \ scrapy \ http__init __. Py", строка 11, в из scrapy.http.request.form import FormRequest Файл "\ Anaconda3 \ lib \ site-packages \ scrapy \ http \ request \ form.py", строка 11, в import lxml.html Файл "\ Anaconda3 \ lib \ site-packages \ lxml \ html__init __. Py", строка 54, в из .. импортировать этри ImportError: Ошибка загрузки DLL: указанный модуль не найден.

Так что, похоже, это связано не только с интерпретатором, но может быть что-то дополнительное с переменными Anacondas, которые используются для терминала?

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