#--Name: PyQuery 详解
0x00 什么是PyQuery?
这是一个强大又灵活的网页解析库。
如果你觉得写正则太麻烦,
如果你觉得BeautifulSoup语法太难记,
如果你熟悉jQuery,
那么,PyQuery将会成为你的最佳实践!
0x01 pyquery 用法
#初始化
#字符串初始化
#用例:
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html) #初始化PyQuery对象
print(doc('li')) #选择li标签
#URL 初始化
#用例:
from pyquery import PyQuery as pq
doc = pq(url='http://www.baidu.com')
print(doc('head'))
#文件初始化
#用例:
from pyquery import PyQuery as pq
doc = pq(filename='demo.html')
print(doc('head'))
#基本CSS选择器
#用例:
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
print(doc('#container .list li')) #选择CSS属性,id前面加 # ,class前面加 .
#查找元素
#用例: 使用find()方法,查找子元素
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
print(type(items)
print(items)
lis = items.find('li') #find()方法较为常用
print(type(lis))
print(lis)
#用例: 使用children() 查找直接子元素
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
lis = items.children()
print(type(lis))
print(lis)
#用例: 使用children() 方法的选择器 选择active
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
lis = items.children('.active')
print(type(lis))
print(lis)
#父元素
#用例: 使用 parent()方法 选择父元素
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
container = items.parent()
print(type(container))
print(container)
#用例:使用parents()方法 选择父元素
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')
parents = items.parents()
print(type(parents))
print(parents)
#这里我增加了一层 wrap,这样返回了所有的父元素
#下面的选择器 将再次筛选 选择器的选择 让我们看看结果
parent = items.parents('.wrap')
print(parent)
#兄弟元素的选择
#用例:有关于siblings()的使用
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.list .item-0.active')
print(li.siblings())
#用例: 使用siblings()方法,在结果中再次选择
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.list .item-0.active')
print(li.siblings('.active'))
#遍历
#如果选择的是多个元素,我们就要对元素进行遍历
#用例: 单个元素选择
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li))
#用例: 多个元素遍历选择
#如果我们选择的是多个元素,我们则需要使用items()方法对其遍历
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
lis = doc('li').items()
print(type(lis))
for li in lis:
print(li)
#获取信息
#用例: 获取属性
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.attr('href')) #两种方法是一致的,用来获取属性的值
print(a.attr.href)
#用例: 获取文本
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.text())
#用例: 获取HTML
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active')
print(a)
print(a.html())
#DOM操作
#用例: addClass 和 removeClass (老王和隔壁老王)
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.removeClass('active')
print(li)
li.addClass('active')
print(li)
#用例: attr 和 css
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.item-0.active')
print(li)
li.attr('name','link')
print(li)
li.css('font-size','14px')
print(li)
#用例: remove (相对使用比较频繁噢)
html = '''
Hello,World
This is a paragraph.
'''
from pyquery import PyQuery as pq
doc = pq(html)
wrap = doc('.wrap')
print(wrap.text())
wrap.find('p').remove()
print(wrap.text())
#其他DOM方法可以参考PyQuery API
#http://pyquery.readthedocs.io/en/latest/api.html
#使用CSS3 特定的伪类选择器,选择特定的标签
#用例: 伪类选择器
html = '''
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('li:first-child') #选择第1个 li 标签,注意 : 号写法
print(li)
li = doc('li:last-child') #选择最后1个 li 标签
print(li)
li = doc('li:nth-child(2)) #选择指定的,第2个li标签 ,child() 序号从1开始
print(li)
li = doc('li:gt(2)) #选择序号比3大的,也就是第3个 li 标签之后的 li 标签 (序号从0开始)
print(li)
li = doc('li:nth-child(2n)) #选择序号为偶数索引的 li 标签
print(li)
li = doc('li:contains(second)') #选择文本部分包含 second 的 li 标签
print(li)
#更多CSS选择器可以访问
#http://www.w3school.com.cn/css/index.asp
#PyQuery 官方文档参见
#http://pyquery.readthedocs.io/