【解析库pyquery】

# -*- coding: utf-8 -*-
# @Time : 2021/12/26 15:42
# @Author :liuw
# @File : pyquerytest.py
# @Software: PyCharm

'''
今日下雨 冬日的冷雨淅淅沥沥,视乎离年关越来越近了
一个人没有朋友,也不需要其他人的帮助
'''
import requests
from pyquery import PyQuery as pq

doc = pq(url='https://cuiqingcai.com')
print(doc('title')) #初始化的参数可以传入网页的URL

doc = pq(requests.get('https://cuiqingcai.com').text)
print(doc('title'))

#文件初始化
doc = pq(filename='test.html')
# print(doc('li'))

# 4.3.3基本css选择器
html = '''
<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>
'''
doc = pq(html)
# print(doc('#container .list li'))
print(type(doc('#container .list li')))#意思很直接先选取id为container的节点,在选取class为list的节点内部的所有li节点,在打印输出

# 4.4.4查找节点
items = doc('.list')
print(type(items))
lis = items.find('li') #传入css选择器 选取其内部的li节点 find查找范围是节点的所有子孙节点
# print(lis)

#我们也可以使用children只想查找子节点
lis = items.children('li')
# print(lis)
#如果想筛选所有子节点中符合条件的节点 子节点中class为active的节点
lis = items.children('.active')
# print(lis)

#我们也可以使用parent()方法获取某个节点的父节点
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>
'''
doc = pq(html)
items = doc('.list')
container = items.parent()
# print(container) #返回该节点的直接父节点 <div id="container">

parents = items.parents()
#输出结果有2个 会返回所有的祖先节点
# print(parents)

#如果筛选某个祖先节点可以往parents()传入css选择器
parent = items.parents('.wrap')
# print(parent)

#如果获取兄弟节点 可以使用siblings方法
li = doc('.list .item-0.active')
# print(li.siblings())

# 4.4.5遍历生成器
lis = doc('li').items()
for li in lis:
    #可以逐个得到li节点对象
    # print(li,type(li))

    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>
    '''
# 6接下来获取信息,重要的信息有2类 一是获取属性 二是获取文本
doc = pq(html)
a= doc('.item-0.active a')  #获取a节点信息的内容
print(a,type(a))
#传入属性的名称,得到属性值
print(a.attr('href'))
print(a.attr.href)

#如果想获取a节点 所有的属性,使用前面提到的遍历
a = doc('a')
for item in a.items():
    pass
    # print(item.attr('href'))
#观察返回节点是多个还是一个,如果是多个则使用遍历才能依次获取每个节点的属性

# 另外一个操作就是获取其内部的文本 可以调用text()方法来实现
a = doc('.item-0.active a')
# print(a)
# print(a.text())

html = '''
<div class="wrap">
    <div id="container">
        <ul class="list">
             <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>
'''

print('-----')
doc = pq(html)
li = doc('li')
# print(li.html()) #返回第一个li节点内部的html文本  <a href="link2.html">second item</a>
# print(li.text()) #返回了所有Li节点内部的纯文本  合并成一个字符串
# print(type(li.text()))

# 7.节点操作  remove()方法就是移除
html = '''
<div class="wrap">
    Hello, World
    <p>This is a paragraph.</p>
 </div>
'''
doc = pq(html)
wrap = doc('.wrap')
# print(wrap.text()) #p节点内部的字符串也会打印

#选择P节点 调用remove方法将其移除 打印输出Hello,World
wrap.find('p').remove()
# print(wrap.text())

#4.4.8 伪类选择器 CSS选择器之所以强大,在于它支持多种多样的伪类选择器,如选择第一个节点,最后一个节点、包含某一文本的节点
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>
'''
doc = pq(html)
li = doc('li:first-child')
print(li)
li = doc('li:nth-child(2)')#第二个节点
print(li)
li = doc('li:gt(2)')
print(li)#返回第4 5节点内容 ---也就是第三个li之后的li节点内容


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值