初始化

比如直接传入字符串,传入 URL,传入文件名,等等

像 Beautiful Soup 一样,初始化 pyquery 的时候,也需要传入 HTML 文本来初始化一个 PyQuery 对象

字符串初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from pyquery import PyQuery #导入PyQuery库

html =\
"""
<div id="top">
<span class="position" width="350">职位名称</span>
<span>职位类别</span>
<li class="item-0">
<a href="link1.html">爬虫</a>
</li>
</div>
""" # 字符串
doc = PyQuery(html) # 初始化
print(doc('li')) # 选择所有的li节点

结果可以看见他会叫li节点的内容全部输出出来

1
2
3
<li class="item-0">
<a href="link1.html">爬虫</a>
</li>

URL 初始化

PyQuery可以直接传入网页的 URL

1
2
3
4
from pyquery import PyQuery #导入PyQuery库

doc = PyQuery(url='https://www.zssnp.top') # 初始化
print(doc('title')) # 选择title节点

结果

1
<title>ZSSのW啥都学</title>

文件初始化

PyQuery可以直接传递本地的文件名
测试下面这个是a.html文件

1
2
3
4
5
6
7
<div id="top">
<span class="position" width="350">职位名称</span>
<span>职位类别</span>
<li class="item-0">
<a href="link1.html">爬虫</a>
</li>
</div>

python调用他

1
2
3
4
from pyquery import PyQuery #导入PyQuery库

doc = PyQuery(filename='a.html') # 初始化
print(doc('li')) # 选择title节点

结果

1
2
3
<li class="item-0">
<a href="link1.html">爬虫</a>
</li>

基本 CSS 选择器

先,用一个实例来感受 pyquery 的 CSS 选择器的用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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>
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('#container .list li'))
print(type(doc('#container .list li')))

运行结果如下:

1
2
3
4
5
6
<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>
<class 'pyquery.pyquery.PyQuery'>

这里我们初始化 PyQuery 对象之后,传入了一个 CSS 选择器#container .list li,它的意思是先选取 idcontainer 的节点,然后再选取其内部的 classlist 的节点内部的所有 li 节点。然后,打印输出。可以看到,我们成功获取到了符合条件的节点。

最后,将它的类型打印输出。可以看到,它的类型依然是 PyQuery 类型。

查找节点

子节点

  • find()的查找范围是节点的所有子孙节点

    find() 方法,传入 CSS 选择器,选取其内部的 li 节点,最后打印输出,find() 方法会将符合条件的所有节点选择出来

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    html =\
    """
    <div id="top">
    <span class="position" width="350">职位名称</span>
    <span>职位类别</span>
    <li class="item-0">
    <a href="link1.html">爬虫</a>
    <li class="item-1 active"><a href="link4.html">fourth item</a></li>
    </li>
    </div>
    """
    from pyquery import PyQuery as pq
    doc = pq(html)
    print(doc('.item-0'))
    print(type(doc('.item-0')))

    print(doc.find("li"))
    print(type(doc.find("li")))
  • children()而如果我们只想查找子节点