python爬虫哪个选择器好用_Python爬虫之pyquery基本CSS选择器

基本CSS选择器

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

d62a6059252dd42a57c087a2ba823cb1c8eab828.png?token=7bfa8e0e489036b09b8c6f7e3fc88af9&s=A9C2A3400FA1A9605E5DE4070300E0C2

运行结果如下:

0b46f21fbe096b6320b53912bb8ae040eaf8ac06.png?token=74696c9afd28d0cec731e0cc7cb6f393&s=69E21367C9EDB9725ED158030300E0C1

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

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

查找节点

下面我们介绍一些常用的查询函数,这些函数和jQuery中函数的用法完全相同。

子节点查找子节点时,需要用到find( )方法,此时传入的参数是CSS选择器。这里还是以前面的HTML为例子:

77094b36acaf2eddfaf5830435a966ed38019311.png?token=e11eafa5f226c23a33140125be05eb45&s=2BD2A3485EA1B96008FDC4070300E0C2

运行结果如下:

d439b6003af33a87583fb9207fe5773c5243b5fc.png?token=2d877f34c618e562bbac0b4eb12f7afc&s=69E2336717B199600ED5B4060300E0C1

首先,我们选取class为list的节点,然后调用了find( )方法,传入CSS选择器,选取其内部的li节点,最后打印输出。可以发现,find( )方法会讲符合条件的所有节点选择出来,结果的类型是PyQuery类型。

其实,find( )方法的查找范围是节点的所有子孙节点,而如果我们只想查找子节点,那么可以用children( )方法:

241f95cad1c8a78641116d45deb0ae3971cf50fb.png?token=78e7db24a9735fc791d88bb0a3d1ef83&s=38C2A3401AA099641CD5E4060300E0C2

运行结果如下:

b7003af33a87e950352b868ca7813447faf2b44b.png?token=2af574cb5f9f5823fc97ca5c40edd21d&s=69E23367DDC599720EF8FC030300A0C1

如果要筛选所有子节点中符合条件的节点,比如想筛选出子节点中的class为active的节点,可以向children( )方法传入CSS选择器,active:

cb8065380cd79123a397b696158d3e86b3b7801e.png?token=3bd5a6bd08ce6e5ece0f67bcad6a2bfb&s=3BC2A3485FA5BD60565DE0030300E0C2

运行结果如下:

d52a2834349b033bbcd586ccad7751d7d439bd81.png?token=ef950c873d754e5621fb1605f111e8f7

可以看到,输出结果已经做了筛选,留下了class为active的节点。

父节点我们可以用parent( )方法来获取某个节点的父节点,示例如下:

7c1ed21b0ef41bd52bf1ed6be963e6cf3bdb3dc8.png?token=cabd524b9bcf14aef63b06ec5e8f6faa&s=39C2A3401AA0996C4EC5C4070300E0C2

运行结果如下:

09fa513d269759ee7539997d0a4224126c22df5d.png?token=f486f32504be77473eba342061457bbc&s=69C213678BA099600E79BC030300E0C1

这里我们首先用.list选取class为list的节点,然后调用parent( )方法得到其父节点,其类型依然是PyQuery类型。

这里的父节点是该节点的直接父节点,也就是说,它不会再去查找父节点的父节点,即祖先节点。但是如果想获取某个祖先节点,该怎么办呢?这时可以用parents( )方法:

caef76094b36acafda1ac113c560ea1403e99ca1.png?token=2eb7b8afdd1a6173709c025452f85047&s=B8C2A3401EA1B9705655C4030300E0C2

运行结果如下:

fc1f4134970a304eb8cb6ce56871c082c8175c06.png?token=097ac25333836584308a0e1277b22d70&s=69E233671BA1B9604E51FC070300E0C1

可以看到,输出结果有两个:一个是class为wrap的节点,一个是id为container的节点。也就是说,parents( )方法会返回所有的祖先节点。

如果想要筛选某个祖先节点的话,可以向parents( )方法传入CSS选择器,这样就会返回祖先节点中符合CSS选择器的节点:

18d8bc3eb13533fa306e78c5106a9a1b43345bbb.png?token=1d740415778755ce5cc78f1029ee573d&s=3AC2A3480AA1996C08F5E4070300E0C2

运行结果如下:

8644ebf81a4c510f6f2daeb1d7e04229d62aa5ea.png?token=0de971f59fd4886eb5b88e397dd25e10&s=49C21367CFE589700C58F8030300E0C1

可以看到,输出结果少了一个节点,只保留了class为wrap的节点。

兄弟节点前面我们说明了子节点和父节点的用法,还有一种节点,那就是兄弟节点。如果要获取兄弟节点,可以使用siblings( )方法。这里还是以上面的HTML代码为例:

728da9773912b31b0db1d41d3fa1517edbb4e167.png?token=5db2214d31db855c512eae18d356b0df&s=3AC2A3481FA199700E55E00B0300A0C2

这里首先选择class为list的节点内部class为item-0和active的节点,也就是第三个li节点。那么,很明显,它的兄弟节点有4个,那就是第一二三四五个li节点。

运行结果如下:

d439b6003af33a87dbf0394a7ee5773c5243b57a.png?token=76ddd664d7bdbdf9b2330cba7f561767&s=6BC21366CFE48D704E5178030300A0C1

可以看到,这正是我们刚才所说的4个兄弟节点。

如果要筛选某个兄弟节点,我们依然可以向siblings( )方法传入CSS选择器,这样就会从所有兄弟节点中挑选出符合条件的节点了:

562c11dfa9ec8a13964774274fbaf68ba2ecc0d2.png?token=7a0fd970c8981a707513bff6763b47bd&s=B8C2A3404BA1B9605655C00B0300E0C2

这里我们筛选了class为active的节点,通过刚才的结果可以观察到,class为active的兄弟节点只有第四个li节点,所以结果应该是一个。

我们再来看一下运行结果:

a044ad345982b2b7f56d21368714aceb74099b8b.png?token=d9c5982f65b989c018f789c03a9c794b&s=2BC21366CFA497705C753C0B0300E0C1

下面一节我们将会对节点操作作出进一步的解释以及相关用法的介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值