pyquery 的使用

Posted jonas-von

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pyquery 的使用相关的知识,希望对你有一定的参考价值。

pyquery 的使用

跟XPath 和 BeautifulSoup类似的,pyquery也是一个解析库。像Beautiful Soup 一样,初始化pyquery的时候,也需要传入html文本来初始化一个pyquery对象。除此以外,还可以直接传入URL,传入文件名等。下面来详细介绍:

from pyquery import PyQuery as pq

html = ‘‘‘
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <ul>
        <li class="item-0">first item</li>
        <li class="item-1"><a href="link2.html">second item</a></li>
        <li class="item-0"><a href="link3.html"><span class="bold">third item</span></a></li>
        <li class="item-1"><a href="link4.html">fifth item</a></li>
        <li class="item-0"><a href="link5.html">fifth item</a></li>
    </ul>
</div>
</body>
</html>
‘‘‘
doc = pq(html)
print(doc(li))

 这里首先引入了PyQuery这个对象,取别名为pq,然后声明了一个HTML字符串,并将其当作参数传递给PyQuery对象,这样就完成了初始化了。接下来,将初始化的对象传入CSS选择器,就可以获取到相应的节点。除此以外,还可以传一个URL参数:

from pyquery import PyQuery as pq

doc = pq(url=https://www.cnblogs.com/jonas-von)
print(doc(title))

结果打印输出我的博客的title内容。还可以通过文件的形式初始化:

from pyquery import PyQuery as pq

doc = pq(filename=test.html)
print(doc(li))

当然,在本地需要有test.html这个文件。

 

1. 基本选择器

其实在上面的实例中也用到了CSS选择器,PyQuery实例对象的参数就是CSS选择器,这在里就不过多阐述了。

 

2. 查找节点

查找子节点,需要用到find()方法,此时传入的参数就是CSS选择器:

from pyquery import PyQuery as pq

doc = pq(filename=test.html)
lis = doc(li)
print(lis.find(.bold))

首先通过通过元素选择器选择了所有的li,然后调用find()方法,传入类选择器找到了class属性为bold的元素。从这里也可以看出,find()方法查找的范围是所有子孙节点,如果我们只想找子节点,可以用children()方法。

查找父节点,可以使用parent()方法,如果需要查找祖先节点,可以使用parents()方法。

查找兄弟节点,可以使用siblings()方法。

 

3. 遍历

从上面的实例可以得出结论:pyquery的选择结果可能是多个节点,也可以是一个节点,但无论是一个结果还是多个结果,类型都是PyQuery类型,并不像BeautifulSoup(一个结果直接返回,多个结果使用列表储存再返回)。对于单个节点,可以直接打印输出,也可以直接使用str()方法转化为字符串,但是对于多个节点,我们就需要遍历来获取了。

from pyquery import PyQuery as pq

doc = pq(filename=test.html)
lis = doc(li).items()
for li in lis:
    print(li,type(li))

调用items()方法后,会得到一个生成器,遍历即可得到每个li对象了,这里的类型也是PyQuery对象。

 

4. 获取信息

提取到某个PyQuery对象后,可以通过attr()方法来获取属性:

from pyquery import PyQuery as pq

doc = pq(filename=test.html)
print(doc(li span).attr(class))

需要注意的是,attr()方法返回的结果只有一个,无论选择器匹配的结果有多少个。所以,如果存在多个结果时,需要遍历来实现。

 

调用text()方法来获取标签文本:

from pyquery import PyQuery as pq

doc = pq(filename=test.html)
print(doc(li span).text())

该方法会忽略HTMl标签,只返回纯文字文本,但如果需要获取html文本,可以使用html()方法,此时返回的是标签体!!但是需要注意一个问题,text()可以返回多个结果,而html()只返回第一个匹配的标签体文本,如果需要获取多个,则同样需要遍历。

 

5. 节点操作

pyquery提供了一系列方法来对节点进行动态修改(类似于jQuery),比如添加或移除一个class等操作:

addClass 和 removeClass 

前者用于添加class属性,后者用于删除class属性

 

attr、text 和 html

除了class 以外,可以通过attr()方法对属性进行操作,还可以使用text()和html()方法来改变标签内容。

 

remove

移除某个节点

以上是关于pyquery 的使用的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫编程思想(64): 在pyquery中使用CSS选择器

# [爬虫Demo] pyquery+csv爬取猫眼电影top100

Python爬虫编程思想(66): 使用pyquery获取节点信息

Python爬虫编程思想(66): 使用pyquery获取节点信息

用pyquery5行代码爬取百度热点新闻

Python爬虫编程思想(63): pyquery基础知识