这次是pyquery,适合通过css找节点,然后提取数据。
- 找父节点、找字节点、找兄弟节点
- 提取属性信息、提取文本信息、提取html信息
- 修改节点内容
ok,开始。
基本的导入与使用
from pyquery import PyQuery as pq
html= ‘’‘~~~~~~~~‘’‘
doc = pq(html)
print(doc('li'))
其实,初始化PyQuery对象还有两种方法:
一种是URL,一种是本地的html文件,
doc = pq(url='https://cuiqingcai.com')
print(doc('title'))
doc = pq(filename='demo.html')
print(doc('li'))
如何找节点呢?
可以通过find()方法来找
items = doc('ul')
print(items.find('li'))
类似的,可以通过children()方法找,
items = doc('ul')
print(items.children('li'))
两者的区别是:
find是在该节点的所有子孙节点中查找节点
children()是在该节点的 子节点中找节点
同理,找父节点和祖先节点也一样,用的方法分别为:parent() parents(),在括号中加限制来找目标节点。
找兄弟节点 使用: siblings()
补: 当找到的节点对象 包含多个节点时, 用遍历来获取多节点的结果。
doc = pq(html)
lis = doc('li').items()
for li in lis:
print(li)
获取属性值与文本值
获取属性值: 用 attr 或者 attr()
print(a.attr.href)
print(a.attr('href'))
取文本值: 有text() 和 html(),前者只是取文本值,后者会把节点内部的所有东西都取到,包括html标签。
print(a.text())
print(a.html())
修改节点内容:
可以利用attr、text()、html()来修改节点的内容
li = doc('li')
li.attr('name','link') // 给li节点中的name属性赋值为link
li.text('666') //把原先li节点中的所有内容修改为 666
li.html('<p>666</p>') // 把li中的所有内容修改为<p>666</p>
可以用remove()移除pq对象中的某个节点,方便我们提取数据:
html = ‘’‘
<div class='wrap'>
hello
<p>66666</p>
</div>
’‘’
//我们想提取hello,可以先删去p节点,然后直接取文本。
doc = pq(html)
wrap = doc('.wrap')
wrap.children('p').remove()
print(wrap.text())
ok,
88