JQuery del lado del servidor

Digamos que tengo un script escrito en perl o python. ¿Cuál es la forma más fácil de escribir una función que utilice selectores de jQuery en cadenas como parte de ella? es decir, para poder hacer:

jquery_selector('table.new#element', text) 

donde jquery_selector es una función que ejecuta un selector de jquery en la cadena html almacenada en text . Incluso si se limitara a devolver cadenas (no objetos de jQuery completos), aún sería realmente útil. es decir, si se le pedía que proporcionara una función javascript como callback que convertiría los resultados en algo comprensible en el lenguaje de scripting:

 jquery_selector('table.new#element, text, 'function(e){return e.val()}') 

Y devolvería los resultados de la callback como una lista.

Me doy cuenta de que hay bibliotecas dom para la mayoría de los idiomas, pero jquery es mucho mejor que la mayoría de ellos.

No estoy preguntando acerca de las bibliotecas nativas que tienen una syntax como jquery. Supongo que lo que se necesitaría es una API para un navegador en el que se ejecutaría jquery? ¿O es esto lo que hace node.js?

Si entiendo tu pregunta correctamente, lo que quieres es algo como phantom.js . PhantomJS es un WebKit sin cabeza con API de JavaScript. puede inyectar jquery en él y usar todos los selectores de jQuery para manipular el dom. Usted puede hacer que funcione como un servidor independiente también.

Estoy confundido, ya que ha etiquetado la pregunta con “node.js” aunque se refiere a Python o Perl en su pregunta. Ejecutar node.js y / o phantom.js solo para ejecutar un selector en un HTML DOM me suena bastante pesado, y como siempre, introducir cadenas enteras de dependencias debe considerarse cuidadosamente en proyectos del mundo real.

Así que para Python sugeriría ejecutar una combinación de BeautifulSoup y soupselect , como se menciona en esta respuesta . Entonces puedes hacer cosas como:

 from BeautifulSoup import BeautifulSoup as Soup from soupselect import select import urllib soup = Soup(urllib.urlopen('http://slashdot.org/')) select(soup, 'div.title h3') 

Tenga en cuenta que soupselect parece implementar solo un subconjunto de los selectores de CSS3 de jQuery, por lo que para cosas como p.ej. selectores de hermanos o pseudo-clases puede no funcionar. En este caso, le aconsejaría considerar portar la parte relevante del proyecto a node.js donde puede ejecutar Sizzle (motor de selección de jQuery) o cheerio standalone en un entorno algo ligero.