Python与JQuery 转帖请注明出处!谢谢
- PyQuery介绍
pyquery库是jQuery的Python实现,可以用于解析HTML网页内容,
实例:
from pyquery import PyQuery as pyq
html = '''
<html>
<title>selenium</title>
<body>
<p id="hi">Hello</p>
<ul>
<li>列表1</li>
<li>列表2</li>
</ul>
</body>
</html>
'''
jq = pyq(html)
print(jq('title')) # 获取 title 标签的源码
print(jq('title').text()) # 获取 title 标签的内容
print(jq('#hi').text()) # 获取 id 为 hi 的标签的内容
li = jq('li') # 处理多个元素
- Pyquer常用方法
- PyQuery(*args, **kwargs) :返回值相当于 jQuery 里面的 $ 符号了:
- html()和text():获取相应HTML块或文本
实例:
from pyquery import PyQuery as pq
p=pq("<head><title>selenium</title></head>")
p('head').html()#返回<title>selenium</title>
p('head').text()#返回selenium
- “html标签名”根据HTML标签来获取元素
实例:
from pyquery import PyQuery as pq
d=pq('<div><p>autonmation1</p><p> autonmation2</p></div>')
d('p')#返回[<p>,<p>]
print(d('p'))#返回<p>autonmation1</p><p> autonmation2</p>
print (d('p').html()) #返回autonmation1
注意:当获取到的元素不只一个时,html()、text()方法只返回首个元素的相应内容
- eq(index) :根据给定的索引号得到指定元素
实例:
from pyquery import PyQuery as pq
d=pq('<div><p>autonmation1</p><p> autonmation2</p></div>')
print(d('p').eq(1).html()) #得到第二个p标签内的内容
filter():根据类名、id名得到指定元素,
实例:
from pyquery import PyQuery as pq
d=pq("<div><p class='test1' >autonmation1</p><p id=”2”> autonmation2</p></div>")
d('p').filter('#2') #返回[<p#1>]
d('p').filter('.test1') #返回[<p.2>]
- find():查找嵌套元素
实例:
from pyquery import PyQuery as pq
d=pq("<div><p class='test1' >autonmation1</p><p id=”2”> autonmation2</p></div>")
d('div').find('p')#返回[<p class="test1">autonmation1</p><p id="”2”"> autonmation2</p>
d('div').find('p').eq(0)#返回[<p class="test1">autonmation1</p>]
- 直接根据类名、id名获取元素
实例:
from pyquery import PyQuery as pq
d=pq("<div><p class='test1' >autonmation1</p><p id='2'> autonmation2</p></div>")
d('#2').html()#返回autonmation2
d('.test1').html()#返autonmation1
- 获取属性值
实例:
from pyquery import PyQuery as pq
d=pq("<p id='testid'><a href='http://www.weilian.com'>selenium</a></p>")
d('a').attr('href')#返回http://hello.com
d('p').attr('id')#返回testid
- 修改属性值
实例:
from pyquery import PyQuery as pq
d=pq("<p id='testid'><a href='http://www.weilian.com'>selenium</a></p>")
d('a').attr('href', 'http://test.com')
print(d('a').attr('href')) #返回http://test.com
- addClass(value):为元素添加类
实例:
from pyquery import PyQuery as pq
d=pq("<p id='testid' ><a href='http://www.weilian.com'>selenium</a></p>")('p')
d.addClass('my_class')#<p id="testid" class="my_class"><a href="http://www.weilian.com">selenium</a></p>
- removeClass:为元素去掉class
实例:
from pyquery import PyQuery as pq
d=pq("<p id='testid' class='selenium' ><a href='http://www.weilian.com'>selenium</a></p>")('p')
d.remove_class('selenium')#<<p id="testid" class=""><a href="http://www.weilian.com">selenium</a></p>
- has_class(name): #返回判断元素是否包含给定的类
实例:
from pyquery import PyQuery as pq
d=pq("<p id='testid' class='selenium' ><a href='http://www.weilian.com'>selenium</a></p>")('p')
d.has_class('selenium')#True
- children(selector=None):获取子元素
实例:
from pyquery import PyQuery as pq
d=pq("<span><p class='test1' >autonmation1</p><p id='2'> autonmation2</p></span>")
d.children()#返回[<p class="test1">autonmation1</p><p id="2"> autonmation2</p>]
d.children('#2')#<p id="2"> autonmation2</p>
- parents(selector=None):获取父元素
实例:
from pyquery import PyQuery as pq
d=pq("<span><p class='test1' >autonmation1</p><p id='2'> autonmation2</p></span>")
d('p').parents()#返回[<span>]
d('.test1').parents('span')#返回[<span>]
(d('#2').parents('p')
- nextAll(selector=None) :返回后面全部的元素块
实例:
from pyquery import PyQuery as pq
d=pq("<p class='test1' >autonmation1</p><p id='2'> autonmation2</p><a href='http://weilian.com'>")
d('p:first').nextAll()#返回<p id="2"> autonmation2</p><a href="http://weilian.com"/>
d('p:last').nextAll()#返回<a href="http://weilian.com"/>
- not_(selector) :返回不匹配选择器的元素
实例:
from pyquery import PyQuery as pq
d=pq("<p class='test1' >autonmation1</p><p id='2'> autonmation2</p><a href='http://weilian.com'>")
d('p').not_('#2')#返回[<p class="test1">autonmation1</p>]
- 遍历用到 items 方法返回对象列表
实例:
from pyquery import PyQuery as pq
d=pq(""" <ul>
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>'>""")
lis = d('li')
for li in lis.items():
print(li.html())