Как Python может работать с JavaScript - PullRequest
1 голос
/ 26 июля 2011

Я работаю над приложением scrapy для сбора некоторых данных на веб-странице.

Но некоторые данные загружаются ajax, и поэтому python просто не может выполнить это для получения данных.

Есть ли какая-нибудь библиотека, которая имитирует поведение браузера?

Ответы [ 4 ]

4 голосов
/ 26 июля 2011

Для этого вам нужно будет использовать полноценный движок Javascript (например, Google V8 в Chrome), чтобы получить реальную функциональность браузера и то, как он взаимодействует. Однако вы могли бы получить некоторую информацию, просмотрев все URL-адреса в источнике и выполнив запрос к каждому из них, надеясь получить достоверные данные. Но в целом вы застряли без полноценного движка Javascript.

Что-то вроде python-spidermonkey . Оболочка для движка Javascript в Mozilla. Однако его использование может быть довольно сложным, но это зависит от вашего конкретного приложения.

В основном вам нужно создать браузер, но, похоже, люди из Python сделали это просто. С PyWebkitGtk вы получите дом, и с помощью Python-spidermonkey, упомянутого ранее, или PyV8 , упомянутого Дунканом, теоретически вы получите полную функциональность, необходимую для браузера / веб-мастера. *

3 голосов
/ 26 июля 2011

Проблема в том, что вам не нужно просто иметь возможность выполнять какой-то Javascript (это легко), вам также нужно эмулировать DOM браузера, и это большая работа.

Если вы хотитебыть в состоянии запустить Javascript, тогда вы можете использовать PyV8.Установите его с easy_install PyV8, и затем вы сможете выполнить любой автономный javascript:

>>> import PyV8
>>> ctxt = PyV8.JSContext()
>>> ctxt.enter()
>>> ctxt.eval("(function(a,b) { return [a+b, a*b, a/b, a-b] })(13,29)")
<_PyV8.JSArray object at 0x01F26A30>
>>> list(_)
[42, 377, 0.4482758620689655, -16]

Вы также можете передать классы, определенные в Python, так что в принципе может быть достаточно для эмуляции DOM для ваших целей.

2 голосов
/ 24 сентября 2014

Самый простой способ выполнить работу - использовать PyExecJS.https://pypi.python.org/pypi/PyExecJS

PyExecJS - это перенос ExecJS из Ruby.PyExecJS автоматически выбирает лучшую доступную среду выполнения для оценки вашей программы JavaScript, а затем возвращает результат в виде объекта Python.

Я использую Macbook и установил node.js, поэтому pyexecjs может использовать javascript-среду выполнения node.js.

pip install PyExecJS

Тестовый код:

import execjs execjs.eval ("'red yellow blue'.split (' ')")

Удачи!

2 голосов
/ 26 июля 2011

AJAX-запрос - это обычный веб-запрос, который выполняется асинхронно. Все, что вам нужно, это URL, который код JavaScript отправляет на сервер. Используйте этот URL с urllib , чтобы получить те же данные.

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