与Beautiful Soup一样,需要传入HTML文本来初始化一个PyQuery对象。它的初始化方式有多种。直接传入字符串、传入URL、传入文件名,等等。
from pyquery import PyQuery
html = '''
- first item
- second item
- three item
- fourth item
- fifth item
'''
pq = PyQuery(html)
print(pq('span'))
from pyquery import PyQuery
doc = PyQuery(url='https://blog.csdn.net/weixin_43670190')
print(doc('title'))
在这里,PyQuery对象会先请求URL,然后再使用请求道的HTML来初始化对象,这相当于用王爷的源代码以字符串的形式传递给PyQuery类来初始化。
from pyquery import PyQuery
doc = PyQuery(filename='demo.html')
print(doc('li'))
这需要一个本地HTML文件,它的内容就是待解析的HTML字符串。
from pyquery import PyQuery
html = '''
- first item
- second item
- three item
- fourth item
- fifth item
'''
pq = PyQuery(html)
# 选取id为container节点下的class为list的节点下的所有li节点
print(pq('#container .list li'))
# 类型为PyQuery类型
print(type(pq('#container .list li')))
查找子节点时,需要用到find()方法,传入的参数是css选择器。
from pyquery import PyQuery
html = '''
- first item
- second item
- three item
- fourth item
- fifth item
'''
doc = PyQuery(html)
# 选取class为list的节点
item = doc('.list')
# 调用find()方法获取class为list的节点下的所有li节点
lis = item.find('li')
print(lis)
find()方法是查找范围内的所有子孙节点,若只想要查找子节点,可以这样:
doc = PyQuery(html)
item = doc('.list')
lis = item.children()
lis1 = item.children('.active') # 筛选出子节点中class为active的节点
print(lis)
使用parent()方法来获取某个节点的父节点。
from pyquery import PyQuery
html = '''
- first item
- second item
- three item
- fourth item
- fifth item
'''
doc = PyQuery(html)
item = doc('.list')
lis = item.parent()
print(lis)
parent()方法是选择某节点的直接父节点。这里是获取了class为list节点的直接父节点。
如果想要获取祖先节点,要用parents()方法:
doc = PyQuery(html)
item = doc('.list')
lis = item.parents()
print(lis)
这里是获取了class为list的节点的祖先节点。可以看见有两个结果,一个是class为warp的节点,另一个是id为container的节点。
若是只想要获取某个祖先节点的花,可以向parents()方法中传入css选择器:
doc = PyQuery(html)
item = doc('.list')
lis = item.parents('#container')
print(lis)
使用siblings()方法可以获取某节点的所有兄弟节点。
from pyquery import PyQuery
html = '''
- first item
- second item
- three item
- fourth item
- fifth item
'''
doc = PyQuery(html)
# 选择class为list的节点中的class为item-0和active的节点
item = doc('.list .item-0.active')
lis = item.siblings()
print(lis)
如只想选择某个兄弟节点,那么和parents()方法一样,可以向siblings()方法中传入css选择器:
doc = PyQuery(html)
# 选择class为list的节点中的class为item-0和active的节点
item = doc('.list .item-0.active')
lis = item.siblings('.active')
print(lis)
pyquery的选择结果可能是单个节点,也可能是多个节点。对于单个节点可以直接打印输出,而对于多个节点的结果可以遍历来获取。
from pyquery import PyQuery
html = '''
- first item
- second item
- three item
- fourth item
- fifth item
'''
doc = PyQuery(html)
item = doc('li').items()
for li in item:
print(li)