美文网首页
pyquery简介

pyquery简介

作者: 小T数据站 | 来源:发表于2019-10-09 18:21 被阅读0次

1. 初始化

  • 字符串初始化
html = '''
<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 active"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-1 active"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
     </ul>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('li'))
  • URL初始化
doc = pq(url='http://cuiqingcai.com')
  • 文件初始化
doc = pq(filename='demo.html')

2. 基本CSS选择器

doc = pq(html)
print(doc('#id值 .class值 节点值'))

3. 查找节点

  • 子节点
doc = pq(html)
items =doc('.list')
lis = items.find('li')

find()的查找范围是节点的所有子孙节点,children()只查找子节点

lis = items.children()

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

lis = items.children('.active')
  • 父节点
html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <li class="item-0">first item</li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
             <li class="item-1 active"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a></li>
         </ul>
     </div>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
container = items.parent()
  • 祖先节点可用parents()方法
  • 如果想要筛选某个祖先节点的话,可以向parents()方法传入CSS选择器,这样就会返回祖先节点中符合CSS选择器的节点
  • 兄弟节点
doc = pq(html)
li = doc('.list .item-0.active')
print(li.siblings())
  • 如果要筛选某个兄弟节点,我们依然可以向siblings方法传入CSS选择器,这样就会从所有兄弟节点中挑选出符合条件的节点了

4. 遍历

对于多个节点的结果,我们就需要遍历来获取。例如,这里把每一个li节点进行遍历,需要调用items()方法:

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

5. 获取信息

  • 获取属性
doc = pq(html)
a = doc('.item-0.active a')
print(a.attr('href'))
print(a.attr.href)

假如符合条件的a节点有多个,则需要进行遍历:

from pyquery import PyQuery as pq
doc = pq(html)
a = doc('a')
for item in a.items():
    print(item.attr('href'))
  • 获取文本
doc = pq(html)
a = doc('.item-0.active a')
print(a.text())

如果想要获取这个节点内部的HTML文本,就要用html()方法:

print(li.html())

假设选中的是多个节点,html()方法会返回第一个节点的html文本,而text()方法会返回所有节点内部的纯文本,并用一个空格隔开,即返回的是一个字符串。

6. 节点操作

举一个有用的比较多的节点操作的例子:

<div class="wrap">
    Hello, World
    <p>This is a paragraph.</p>
 </div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
wrap = doc('.wrap')
print(wrap.text())  # 1
wrap.find('p').remove()
print(wrap.text())  # 2

1处提取出来的文本是:
Hello, World This is a paragraph.
2处提取出来的文本是:
Hello, World
更多节点操作的方法http://pyquery.readthedocs.io/en/latest/api.html

7. 伪类选择器

CSS选择器之所以强大,还有一个很重要的原因,那就是它支持多种多样的伪类选择器,例如选择第一个节点、最后一个节点、奇偶数节点、包含某一文本的节点等。
关于CSS选择器的更多用法,可以参考http://www.w3school.com.cn/css/index.asp


以上总结于崔庆才的《python3网络爬虫开发实战》

相关文章

网友评论

      本文标题:pyquery简介

      本文链接:https://www.haomeiwen.com/subject/yjbgpctx.html