1、初始化
字符串初始化
doc = pq(html)
文件初始化
doc = pq(filename='demo.html')
#但是需要修改pyquery的源码
if 'filename' in kwargs:
#html = open(kwargs['filename'])
html = open(kwargs['filename'], "r", encoding="utf-8")
URL初始化
doc = pq(url='http://cuiqingcai.com')
#等同于
doc = pq(requests.get('http://cuiqingcai.com').text)
2、查找
全篇以此文档为模板
html = '''
<div id="container">
<ul class="list">
<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>
</div>
<div class="s-main-slot s-result-list s-search-results sg-row">
<div data-asin="" data-index="0" data-uuid="123" data-component-type="" class="list1">
<li class="item-10">first item</li>
<li class="item-11"><a href="link2.html">second item</a></li>
<li class="item-10 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-11 active"><a href="link4.html">fourth item</a></li>
<li class="item-10"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
class=""前面加. id前面加# 标签前面不用加例如 li ul,同一个class的属性追加.
以单个class的单一属性做为筛选条件
doc = pq(html)
main_list = doc('.s-main-slot').items()
count = 0
for ml in main_list:
print(ml)
以单个class的多属性做为筛选条件
main_list = doc('.s-main-slot.s-result-list2.s-search-results').items()
for ml in main_list:
print(ml)
以多个class的多属性做为筛选条件
main_list = doc('.s-main-slot.s-result-list2.s-search-results .list2').items()
class和id和标签一起做为筛选条件
main_list = doc('#container .list li').items()
找到符合筛选条件的子节点
#所有子孙节点
items = doc('.list')
lis = items.find('li')
#子节点
lis = items.children()
print(lis)
#需要使用子节点的话
lis = items.children().items()
找到符合筛选条件的父节点
#直接父节点
items = doc('.list')
container = items.parent()
#祖先节点
items = doc('.list')
parents = items.parents()
找到符合节点的兄弟节点
li = doc('.list .item-0.active')
print(li.siblings())
#添加筛选条件
print(li.siblings('.active'))
遍历
lis = doc('li').items()
for li in lis:
print(li, type(li))
获取信息
a = doc('.item-0.active a')
print(a, type(a))
print(a.attr('href'))
#print(a.attr.href)
#当多节点时,需要遍历读取
for item in a.items():
print(item.attr('href'))
获取文本
text()则返回了所有的li节点内部的纯文本,中间用一个空格分割开,即返回结果是一个字符串。
a = doc('.item-0.active a')
print(a.text())
获取HTML文本
html()方法返回的是第一个li节点的内部HTML文本,如果得到的结果是多个节点,并且想要获取每个节点的内部HTML文本,则需要遍历每个节点
li = doc('.item-0.active')
print(li.html())
节点操作
li = doc('.item-0.active')
li.removeClass('active')
li.addClass('active')
attr,text,html
attr()方法只传入第一个参数的属性名,则是获取这个属性值;如果传入第二个参数,可以用来修改属性值。text()和html()方法如果不传参数,则是获取节点内纯文本和HTML文本;如果传入参数,则进行赋值。
text()方法,传入文本之后,li节点内部的文本全被改为传入的字符串文本了
html()方法传入HTML文本后,li节点内部又变为传入的HTML文本了。
li.attr('name', 'link')
li.text('changed item')
li.html('<span>changed item</span>')