python学习笔记(2) – pyquery的基本操作
虽然pyquery中有关于对html文件增加属性、类、删除类等各类操作,但因为我主要是用来爬网页的,目前也用不到,所以就总结了爬取时非常有用的各类方法。
不过pyquery中好像没有将文本转为字节字符串的函数(或许是我还没找到,若如此,希望知道的朋友告知一下,多谢),所以用的还是requests中的content。
from pyquery import PyQuery as pq
html = """
<div class="div1">
<ul class="ul_1">
<li class="li1">one</li>
<li class="li2">two</li>
</ul>
<div class="div1-1">
<ul class="ul_A">
<li class="li1-a">a</li>
<li class="li1-b">b</li>
<li class="li1-c"><a href="asdf">c</a></li>
</ul>
</div>
</div>
"""
doc = pq(html)
print(doc(".div1 .ul_1"))
print(doc(".div1 .ul_1").text())
.find()
查找的是子孙节点,有时候我习惯直接在选择器中都写完,find()
函数用得较少。打印结果:
<ul class="ul_1">
<li class="li1">one</li>
<li class="li2">two</li>
</ul>
one
two
那么,.text()
的作用也一目了然了 — 剔除html元素,直接获取文本。
查找子节点:.children()
查找兄弟节点:.siblings()
两个都可以结合css选择器继续匹配,直接在括号里输入想要匹配的就行。同时,还有一些伪类选择器的使用:
from pyquery import PyQuery as pq
html = """
<div class="div1">
<ul class="ul_1">
<li class="li1">one</li>
<li class="li2">two</li>
</ul>
<div class="div1-1">
<ul class="ul_A">
<li class="li1-a">a</li>
<li class="li1-b">b</li>
<li class="li1-c"><a href="asdf">c</a></li>
<li class="li1-d">d</li>
</ul>
</div>
</div>
"""
doc = pq(html)
print(doc("li:first-child").text()) # 第一个li节点,返回 one a
print(doc("li:last_child").text()) # 最后一个li节点,返回 two d
print(doc("li:nth-child(3)").text()) # 第三个li节点,返回 c
print(doc("li:gt(3)").text()) # 从第三个开始到最后的li节点,返回 c d
print(doc("li:nth-child(2n)").text()) # 偶数位的li节点,返回 two b d
print(doc("li:contains(a)")) # 返回包含a的li节点,返回 <li class="li1-a">a</li>
print(doc("li:eq(0)").text()) # 索引,从0开始,返回 one,索引为5则返回 d
print(doc("li:even").text()) # 奇数位所有节点,返回 one a c
print(doc("li:odd").text()) # 偶数位所有节点,返回 two b d
pyquery参考网站:https://pyquery.readthedocs.io/en/latest/index.html
更多伪类参考:https://pyquery.readthedocs.io/en/latest/pseudo_classes.html
多谢观看,下面是我自己开的公众号,会和博客内容同步更新,感兴趣的朋友可以关注一下,我们共同学习!