Python中类似于jquery的pyquery库用法分析
本文实例讲述了Python中类似于jquery的pyquery库用法。分享给大家供大家参考,具体如下:
pyquery:一个类似于jquery的Python库
pyquery可以使你在xml文档上做jquery查询,它的API尽可能地类似于jquery。pyquery使用lxml执行快速的xml和html操作。
这并非(至少目前还不是)一个生成javascript代码或者与javascript代码做交互的库。pyquery的作者只是由于非常喜欢jquery的API因而将其用python实现。
该项目目前托管在Github仓库中并且处于活跃开发状态。作者可以为任何想要贡献源码的开发者赋予push权限,并且会对其做的变更做回顾。如果你想要贡献源码,可以发Email给项目作者。
项目的Bug可以通过GithubIssueTracker进行提交。
快速入门
你可以使用PyQuery类从一个字符串,一个lxml文档,一个文件或者一个url钟载入一个xml文档:
>>>frompyqueryimportPyQueryaspq >>>fromlxmlimportetree >>>importurllib >>>d=pq("") >>>d=pq(etree.fromstring("")) >>>d=pq(url=your_url) >>>d=pq(url=your_url, ...opener=lambdaurl,**kw:urlopen(url).read()) >>>d=pq(filename=path_to_html_file)
现在,d就相当于jquery里的$:
>>>d("#hello") [] >>>p=d("#hello") >>>print(p.html()) Helloworld! >>>p.html("youknow
Pythonrocks") [ ] >>>print(p.html()) youknow
Pythonrocks >>>print(p.text()) youknowPythonrocks
你也可以使用某些jQuery中可用而并非css标准的伪类,诸如:first:last:even:odd:eq:lt:gt:checked:selected:file:等
>>>d('p:first') []
参见http://pyquery.rtfd.org/查看全部文档
CSS
你可以像这样添加、切换、移除CSS:
>>>p.addClass("toto") [] >>>p.toggleClass("tititoto") [
] >>>p.removeClass("titi") [
]
或者操作CSS样式:
>>>p.css("font-size","15px") [] >>>p.attr("style") 'font-size:15px' >>>p.css({"font-size":"17px"}) [
] >>>p.attr("style") 'font-size:17px'
使用更加Pythonic的方式完成同样的功能(‘_'字符转换为‘-‘):
>>>p.css.font_size="16px" >>>p.attr.style 'font-size:16px' >>>p.css['font-size']="15px" >>>p.attr.style 'font-size:15px' >>>p.css(font_size="16px") [] >>>p.attr.style 'font-size:16px' >>>p.css={"font-size":"17px"} >>>p.attr.style 'font-size:17px'
使用伪类:
- :button
匹配所有按钮输入元素和按钮元素Matchesallbuttoninputelementsandthebuttonelement
- :checkbox
匹配所有复选框输入元素Matchesallcheckboxinputelements
- :checked
匹配选中的元素,下标从0开始Matchesoddelements,zero-indexed
- :child
右边是左边的直接子元素rightisanimmediatechildofleft
- :contains()
包含元素Matchesallelementsthatcontainthegiventext
- :descendant
右边是左边的子元素、孙元素或者更远的后继元素rightisachild,grand-childorfurtherdescendantofleft
- :disabled
匹配所有被禁用的元素Matchesallelementsthataredisabled
- :empty
匹配所有不包括任何其他元素的元素Matchallelementsthatdonotcontainotherelements
- :enabled
匹配所有启用的元素Matchesallelementsthatareenabled
- :eq()
使用下标匹配Matchesasingleelementbyitsindex
- :even
从下标0开始,匹配所有偶数元素Matchesevenelements,zero-indexed
- :file
匹配所有文件类型的输入元素Matchesallinputelementsoftypefile
- :first
匹配第一个被选择的元素Matchesthefirstselectedelement
- :gt()
匹配下标大于指定值的元素Matchesallelementswithanindexoverthegivenone
- :header
匹配所有标题元素Matchesallheaderelelements(h1,...,h6)
- :image
匹配所有图像输入元素Matchesallimageinputelements
- :input
匹配所有输入元素Matchesallinputelements
- :last
匹配最后一个选择的元素Matchesthelastselectedelement
- :lt()
匹配所有下标小于指定值的元素Matchesallelementswithanindexbelowthegivenone
- :odd
匹配奇元素,下标从0开始Matchesoddelements,zero-indexed
- :parent
匹配所有包含其他元素的元素Matchallelementsthatcontainotherelements
- :password
匹配所有密码输入元素Matchesallpasswordinputelements
- :radio
匹配单选按钮输入元素Matchesallradioinputelements
- :reset
匹配所有重置输入元素Matchesallresetinputelements
- :selected
匹配所有被选中的元素Matchesallelementsthatareselected
- :submit
匹配所有提交输入元素Matchesallsubmitinputelements
- :text¶
匹配所有文本输入元素Matchesalltextinputelements
操作
你也可以向标签的尾部追加元素:
>>>d=pq('youknowPythonrocks') >>>d('p').append('checkout reddit') [ ] >>>print(d)
youknowPythonrockscheckout
或者加至开头:
>>>p=d('p') >>>p.prepend('checkoutreddit') [ ] >>>print(p.html()) checkout
reddityouknow...
在其他元素之前或者之后追加元素:
>>>d=pq('python!
]
>>>print(d('#test').html())
在其他元素之后插入元素: ]
>>>print(d('#test').html())
或者插入其他元素之前: ]
>>>print(d('body').html())
对每个元素做一些事情: ]
移除一个元素:
>>>p.insertAfter(d('#test'))
[
>>>p.insertBefore(d('#test'))
[
>>>p.each(lambdai,e:pq(e).addClass('hello2'))
[
>>>d=pq('
pythonrocks!
移除选中元素的内容:
>>>d('p').empty() []
你可以获得修改后的html内容:
>>>print(d)
你可以生成html片段:
>>>frompyqueryimportPyQueryaspq >>>print(pq('Yeah!').addClass('myclass')+pq('cool'))Yeah!