2012-06-29 34 views
4

假设我有一个用perl或python编写的脚本。编写一个函数的最简单的方法是什么?将字符串上的jQuery选择器作为它的一部分使用?即要能够做到:服务器端jquery

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

其中jquery_selector是运行存储在text HTML字符串一个jQuery选择器的功能。即使它仅限于返回字符串(不是完整的jquery对象),它仍然是非常有用的。也就是说,如果你需要给一个JavaScript函数作为回调这将使结果在脚本语言的东西理解:

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

而且它会返回回调的结果列表。

我意识到大多数语言都有dom库,但jquery比大多数语言都好。

我不问有关像jquery语法的本地库。我猜想需要一个jQuery将运行在浏览器上的API?或者这是node.js做的事情?

+0

对于流星1.0和略有不同的方法http://stackoverflow.com/a/26721055/1197775 – juanpastas

回答

4

如果我正确理解你的问题,你想要的就像phantom.js。 PhantomJS是一款带JavaScript API的无头WebKit。你可以注入jquery并使用所有的jquery选择器来操纵dom。您可以使其像独立服务器一样工作。

+2

知道他们被称为*无头浏览器*是一半的战斗。 node.js也有[Zombie.js](http://zombie.labnotes.org/)。 –

+0

@Jared Farrish zombie.js是一个测试框架工作,但有一个幻影节点module.https://github.com/sgentle/phantomjs-node – Kishore

0

我很困惑,因为你用“node.js”标记了问题,尽管你在你的问题中引用了Python或Perl。运行node.js和/或phantom.js只是为了在HTML DOM上运行选择器,这听起来对我来说非常重要,并且始终引入整个依赖关系链应在实际项目中仔细考虑。

因此,对于Python,我建议运行BeautifulSoupsoupselect的组合,如this answer中所述。然后,您可以做这样的事情:

from BeautifulSoup import BeautifulSoup as Soup 
from soupselect import select 
import urllib 

soup = Soup(urllib.urlopen('http://slashdot.org/')) 
select(soup, 'div.title h3') 

注意soupselect似乎只实现jQuery的CSS3选择器的一个子集,因此对于像如兄弟选择器或伪类可能无法工作。在这种情况下,我建议考虑将项目的相关部分移植到node.js,您可以在轻量级的环境中独立运行Sizzle(jQuery的选择器引擎)或cheerio