Python и движок Spidermonkey Javascript в Linux
Я успешно установил движок Spidermonkey JS на мою Linux-машину ( Ubuntu). По сути, моя цель - заставить его выполнять сценарии Ajax (js) и возвращать результат обратно в мой сценарий Python. Я в основном пытаюсь построить хороший веб-скребок. Но мне довольно сложно заставить все это работать.
Сейчас я нахожусь в точке, где, когда я набираю JS в моем терминале, я могу начать выполнять Javascript. Я был в Google и нашел этот маленький фрагмент на Stackru:
import urllib2
import spidermonkey
js = spidermonkey.Runtime()
js_ctx = js.new_context()
script = urllib2.urlopen('http://etherhack.co.uk/hashing/whirlpool/js/whirlpool.js').read()
js_ctx.eval_script(script)
js_ctx.eval_script('var s="abc"')
js_ctx.eval_script('print(HexWhirpool(s))')
но не удалось запустить с ошибкой, что модуль Spidermonkey не может быть найден.
Я немного растерялся сейчас. Кто-нибудь может помочь?
3 ответа
Я тоже пробовал easy_install python-spidermonkey
без удачи, для libnspr-dev
пакет отсутствует.
Итак, я собрал пакет из исходного кода. Инструкции со страницы проекта (Debian Stretch):
Строительство
- Проверьте модуль Python-Spidermonkey из репозитория SVN (я скачал его как исходный архив, прямая ссылка)
- Распакуйте и перейдите на
./python-spidermonkey/trunk
CPPFLAGS="-Wno-format-security" python setup.py build
(эти флаги для Debian)ошибка
jsemit.h:508:32: error: expected ‘(’ before ‘)’ token uintN decltype);
Значит этоdecltype
не может использоваться как переменная (возможно, это макрос или что-то еще), исправьте это следующим образом:sed -e 's / decltype / dectyp /' -i.ORIG./js/src/jsemit.h
sed -e 's / decltype / dectyp /' -i.ORIG./js/src/jsemit.cpp
ошибка
jsemit.cpp:6490:1: error: narrowing conversion of ‘-1’ from ‘int’ to ‘uint8 {aka unsigned char}’ inside { } [-Wnarrowing]
означает недопустимое преобразование переменной, перекомпилируйте его вручную:CD JS / SRC
g++ -o Linux_All_DBG.OBJ/jsemit.o -c -Wall -Wno-сужение -Wno-формат -DDEBUG_user -DEDITLINE -ILinux_All_DBG.OBJ jsemit.cpp
ошибка
spidermonkey.c:1:2: error: #error Do not use this file, it is the result of a failed Pyrex compilation.
- некоторые проблемы с пирексом. Есть патч. Сделай это так:wget -O - https://storage.googleapis.com/google-code-attachments/python-spidermonkey/issue-14/comment-4/cinit.patch | патч -p1 ./spidermonkey.pyx
Монтаж
su
, а также python setup.py install
как корень.
Бег
- По умолчанию установочный скрипт устанавливает
libjs.so
в/usr/local/lib/
, так я и сделалln -s /usr/local/lib/libjs.so /usr/lib/libjs.so
(но вам лучше использовать решение от Seagal82)
Без этого шага Python продолжает жаловаться на импорт ImportError: libjs.so: cannot open shared object file: No such file or directory
- У меня тоже была ошибка
ImportError: cannot import name Runtime
послеfrom spidermonkey import Runtime
, Возможно, причина была в старых данных easy_install в~/.local/lib/python2.7/site-packages/spidermonkey/
, После удаления все работает гладко
Недавно у меня возникла задача сделать что-то вроде удаления из Интернета, и для части javascript, в настоящее время хочу попробовать использовать python-spidermonkey для ее решения и посмотреть, может ли это работать для меня...
и я, кажется, сталкиваюсь с подобной ситуацией, после того, как я думаю, что я закончил установку python-spidermonkey, я выполнил скрипт выше, я получил эту ошибку:
Traceback (most recent call last):
File "spidermonkeytest.py", line 2, in <module>
import spidermonkey
ImportError: libjs.so: cannot open shared object file: No such file or directory
затем после некоторого поиска по Google... я нашел решение, вероятно, в конце здесь: http://hi.baidu.com/peizhongyou/item/ec1575c3f0e00e31e80f2e48
я настраиваю эти вещи:
$sudo vi /etc/ld.so.conf.d/libjs.so.conf
заполните эту строку:
/usr/local/lib/
сохранить и выйти, выполнить ldconfig:
$sudo ldconfig
тогда я могу запустить скрипт, предоставленный выше @Synbitz Prowduczions, не знаю, нужен ли вам этот ответ, или это все еще помогает?
Вам нужно попробовать libnspr4. Если это не сработает, вы всегда можете скачать его с Mozilla и создать код самостоятельно.
Не сложно набрать ./config && make && make install
построить библиотеку самостоятельно после распаковки исходного кода. Если вы создаете себя, файлы, скорее всего, будут в
/ USR / местные /{включают в себя, Lib}
Также попробуйте Google для "YOUR_OS_NAME install nspr4".
- Я полагаю, что кто-то написал переводчик заголовочных файлов C/C++ для Python ctypes. Хотя я не могу сказать больше, потому что я не использую Python.
- SpiderMonkey также имеет собственную реализацию ctypes по образцу Python. Так что технически, если вы знаете javascript, вы можете вообще отказаться от использования Python, поскольку вы хотите сделать с ним немного ajax. Вам нужно будет освежить сокеты времени выполнения NSPR или C, чтобы соответствовать требованиям для ваших проектов с использованием только Spidermonkey.
ИЛИ веб-поиск Python +AJAX может найти именно то, что вам нужно.