python库的解析--PyQuery(pyquery库)

from pyquery import PyQuery as pq

'''
    pyquery是CSS选择器和jQuery的结合用法
'''

html = """
<div>
<ul>
 <li class="item-0">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
"""

doc = pq(html)
print(doc('li'))

# pq()不仅可以以字符串的形式传递,还可以传入网页的URL
doc = pq(url='http://www.baidu.com')
print(doc('title'))
'''
    上述片段功能类似于:
    doc = pq(url='http://www.baidu.com')<=>doc = pq(requests.get(url='http://www.baidu.com').text)
'''

# pq()也可以传递本地文件名
doc = pq(filename='maoyan.html')
print(doc('li'))
print('-'*20, 'result', '-'*20)

# 基本CSS选择器
html = """
<div id="container" style="width:300px;height:200px;display:block;">
<ul class="list">
<li class="item-0">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html">third item</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>
</div>
"""

doc = pq(html)
print(doc('#container .list li'))

# 查找节点
# find()传入参数为css选择器,查找子孙节点
items = doc('.list')
lis = items.find('li')
print(lis)

# children()查找子节点
lis = items.children('li')
print(lis)

# parent()查找父节点
container = items.parent()
print(container)

# parents()查找祖先节点
container = items.parents()
print(container)

# sibling()兄弟节点
li = doc('.item-0.active')
print(li.siblings())

# 遍历PyQuery对象
lis = doc('li').items()
for li in lis:
    print(li)

# attr获取属性
a = doc('.item-0.active a')
print(a)
print(a.attr('href'))
'''
    也可以通过以下方法获取属性:
        print(a.attr.href)
    当结果包含多个节点时,只返回第一个节点的属性值
'''

# text()获取内部文本
a = doc('.item-0.active a')
print(a)
print(a.text())

# html()获取内部html文本
li = doc('.item-0.active')
print(li.html())
'''
    当结果包含多个节点时,html只返回第一个节点的html文本内同
    而text以字符串的形式返回所有节点的文本内容
'''

# 节点操作
li = doc('.item-0.active')
print(li)

# removeClass移除节点的某个class属性
li.removeClass('active')
print(li)
'''
    该方法等价于li.remove_class('active')
'''

# addClass向节点增加某个class属性
li.addClass('active')
print(li)
'''
    该方法等价于li.add_class('active')
'''
print("-"*20, 'result', "-"*20)

# after()向节点后添加值
ul = doc('ul')
ul.after('Never too old to learn')
print(ul)

# empty()清空文本内容
print(li)
li.empty()
print(li)

# has_class()是否具有某个class值
print(li.hasClass('active'))
'''
    该方法等价于li.has_class('active')
'''
print("-"*20, 'result', "-"*20)

li = doc('.item-0.active')
# attr()修改某些属性
li.attr('name', 'link')
print(li)

# text()修改内部文本
li.text('change content')
print(li)

# html()修改内部html文本
li.html("<a href='https://www.baidu.com'>百度</a>")
print(li)
print("-"*20, 'result', "-"*20)

# height([value]*)
# 设置/获取高度
div = doc('div')
print(div)
print(div.height())
div.height('20px')
print(div)
print(div.height())

# hide()将display设置为none
div.hide()
print(div)
print("-"*20, 'result', "-"*20)

ul = doc('ul')
print(ul)
li1 = ul.find('.item-0.active')
li2 = ul.find('.item-1.active')

# node.insertBefore(value)将node插到value之前
li2.insertBefore(li1)
'''
    该方法等价于li2.insert_before(li1)
'''
print(ul)

# node.insertAfter(value)将node插到value之后
li2.insertAfter(li1)
'''
    该方法等价于li2.insert_after(li1)
'''
print(ul)

# remove()移除节点
ul = doc('ul')
print(ul)
ul.find('.item-0.active').remove()
print(ul)

# 伪类选择器
# :first-child第一个节点
li = doc('li:first-child')
print(li)
# 最后一个节点
li = doc('li:last-child')
print(li)
# 第3个节点
li = doc('li:nth-child(3)')
print(li)
print("-"*20, 'result', "-"*20)
# 序列号大于2的节点
li = doc('li:gt(2)')
print(li)
# 奇偶数节点
li = doc('li:nth-child(2n)')
print(li)
# 包含某个文本内容的节点
li = doc('li:contains(second)')
print(li)

更多请查看pyquery标准库

猜你喜欢

转载自blog.csdn.net/hide_in_darkness/article/details/108291464