python循环后接着css,python中pyquery的使用(初始化,css选择器,查找节点,遍历)...

1.初始化

与Beautiful Soup一样,需要传入HTML文本来初始化一个PyQuery对象。它的初始化方式有多种。直接传入字符串、传入URL、传入文件名,等等。

字符串初始化

from pyquery import PyQuery

html = = PyQuery(html)

print(pq('span'))

aa52e121c7e51f8a2b16b9b5c83fa371.png

URL初始化

from pyquery import PyQuery

doc = PyQuery(url='https://blog.csdn.net/weixin_43670190')

print(doc('title'))

在这里,PyQuery对象会先请求URL,然后再使用请求道的HTML来初始化对象,这相当于用王爷的源代码以字符串的形式传递给PyQuery类来初始化。

ad8c0d8b7df0dde0e765c34424c55e1f.png

文件初始化

from pyquery import PyQuery

doc = PyQuery(filename='demo.html')

print(doc('li'))

这需要一个本地HTML文件,它的内容就是待解析的HTML字符串。

2.基本css选择器

from pyquery import PyQuery

html = = PyQuery(html)

# 选取id为container节点下的class为list的节点下的所有li节点

print(pq('#container .list li'))

# 类型为PyQuery类型

print(type(pq('#container .list li')))

c485e97e192df4513fdee70928bc99b5.png

3.查找结点

子节点

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

from pyquery import PyQuery

html = = PyQuery(html)

# 选取class为list的节点

item = doc('.list')

# 调用find()方法获取class为list的节点下的所有li节点

lis = item.find('li')

print(lis)

4224dcaa1e351b0fdb73c1d94598e30f.png

find()方法是查找范围内的所有子孙节点,若只想要查找子节点,可以这样:

doc = PyQuery(html)

item = doc('.list')

lis = item.children()

lis1 = item.children('.active') # 筛选出子节点中class为active的节点

print(lis)

bb78cda1ea23894a063239017fc505ea.png

父节点

使用parent()方法来获取某个节点的父节点。

from pyquery import PyQuery

html = = PyQuery(html)

item = doc('.list')

lis = item.parent()

print(lis)

bdda1e66bef7b6870beaa039abb6bd8b.png

parent()方法是选择某节点的直接父节点。这里是获取了class为list节点的直接父节点。

如果想要获取祖先节点,要用parents()方法:

doc = PyQuery(html)

item = doc('.list')

lis = item.parents()

print(lis)

112016a250e96a9c227de9f81589348d.png

这里是获取了class为list的节点的祖先节点。可以看见有两个结果,一个是class为warp的节点,另一个是id为container的节点。

若是只想要获取某个祖先节点的花,可以向parents()方法中传入css选择器:

doc = PyQuery(html)

item = doc('.list')

lis = item.parents('#container')

print(lis)

22719c0c5d74a1129b4a7191ae602602.png

兄弟节点

使用siblings()方法可以获取某节点的所有兄弟节点。

from pyquery import PyQuery

html = = PyQuery(html)

# 选择class为list的节点中的class为item-0和active的节点

item = doc('.list .item-0.active')

lis = item.siblings()

print(lis)

802203f49cde60f2797b9cdefebd35ea.png

如只想选择某个兄弟节点,那么和parents()方法一样,可以向siblings()方法中传入css选择器:

doc = PyQuery(html)

# 选择class为list的节点中的class为item-0和active的节点

item = doc('.list .item-0.active')

lis = item.siblings('.active')

print(lis)

4f12b464856c6680ad2f20fd128ae452.png

4.遍历

pyquery的选择结果可能是单个节点,也可能是多个节点。对于单个节点可以直接打印输出,而对于多个节点的结果可以遍历来获取。

from pyquery import PyQuery

html = = PyQuery(html)

item = doc('li').items()

for li in item:

print(li)

fabe2fd52f1c2222c4f5832f7e9f8f0c.png

在调用items()方法后,会得到一个生成器,遍历就可以逐个得到li节点对象,类型都是PyQuery类型。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值