# -*- 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节点内容
02-27
3915