0

Linuxマシン(Ubuntu)にSpidermonkeyJSエンジンを正常にインストールしました。基本的に私の目標は、Ajax(js)スクリプトを実行し、その結果をPythonスクリプトに戻すことです。私は基本的に、優れたOOWebスクレイパーを構築しようとしています。しかし、これらすべてを機能させるのはかなり難しいです。

ターミナルにJSと入力すると、Javascriptの実行を開始できるようになりました。私はグーグルしていて、Stackoverflowでこの小さなスニペットを見つけました:

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が見つからないというエラーで実行に失敗しました。

私は今少し迷っています。誰か助けてくれますか?

4

3 に答える 3

1

最近、Webスクレイピングのようなタスクを実行する必要があり、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

それからグーグルで検索した後...私はおそらくここの終わりに解決策を見つけました: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は、これが必要な答えであるかどうかわかりません。それとも、これは役に立ちますか?

于 2013-05-10T08:34:09.100 に答える
1

パッケージがないので、私もeasy_install python-spidermonkey運が悪かったので試しました。libnspr-dev

だから、私はソースからパッケージを構築しました。プロジェクトページ(Debian Stretch)からの指示:

建物

  1. SVNリポジトリからPython-Spidermonkeyモジュールをチェックしてください(ソースアーカイブ、直接リンクとしてダウンロードしました)
  2. 開梱し、CDに./python-spidermonkey/trunk
  3. CPPFLAGS="-Wno-format-security" python setup.py build(Debianのこれらのフラグ)
  4. エラーは、変数として使用できないこと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

  5. エラー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-narrowing -Wno-format -MMD -g3 -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DHAVE_LOCALTIME_R -DHAVE_VA_COPY -DVA_COPY = va_copy -DPIC -f -DDEBUG_user -DEDITLINE -ILinux_All_DBG.OBJ jsemit.cpp

  6. エラー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ルートとして。

ランニング

  1. デフォルトでは、セットアップスクリプトはにインストール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

  1. ImportError: cannot import name Runtime後もエラーが発生しましたfrom spidermonkey import Runtime。その理由は、の古いeasy_installデータにある可能性があります~/.local/lib/python2.7/site-packages/spidermonkey/。それを削除した後、すべてがスムーズに実行されます
于 2016-05-16T13:27:10.327 に答える
0

libnspr4を試す必要があります。それでも問題が解決しない場合は、いつでもMozillaからダウンロードして、自分でコードを作成できます。

./config && make && make installソースのタールを外した後、自分でライブラリをビルドするために入力することは難しくありません。自分でビルドした場合、ファイルはおそらく

/ usr / local / {include、lib}

また、「YOUR_OS_NAMEinstallnspr4」のグーグルを試してみてください。

  • 誰かがPythonctypes用のC/C++ヘッダーファイルトランスレーターを書いたと思います。私はPythonを使用していないので、他に多くを言うことはできませんが。
  • SpiderMonkeyには、Pythonをモデルにした独自のctypesの実装もあります。したがって、技術的には、javascriptを知っている場合は、Pythonでいくつかのajaxを実行したいので、Pythonの使用を完全にやめることができます。Spidermonkeyのみを使用してプロジェクトの要件を満たすには、NSPRまたはCランタイムソケットをブラッシュアップする必要があります。

または、Python + AJAXのWeb検索で、必要なものが正確に見つかる場合があります。

于 2012-03-31T08:35:01.603 に答える