什么是PyQuery?

    这是一个强大又灵活的网页解析库。

    如果你觉得写正则太麻烦,

    如果你觉得BeautifulSoup语法太难记,

    如果你熟悉jQuery,

    那么,PyQuery将会成为你的最佳实践!


#一个简单的例子
from pyquery import PyQuery as pq

html = '''
    请在这里输入html代码
    '''
doc = pq(html)      #初始化PyQuery对象
print(doc('li'))    #选择li标签


CSS选择器

html = '''
    请在这里输入html代码
'''

from pyquery import PyQuery as pq
doc = pq(html)
print(doc('#container .list li'))     #选择CSS属性,id前面加 # ,class前面加 .


查找元素

#用例: 使用find()方法,查找子元素

html = '''
    请在这里输入html代码
'''
from pyquery import PyQuery as pq

doc = pq(html)
items = doc('.list')              #查找class=list的标签
print(items)
lis = items.find('li')      #查找li标签   find()方法较为常用
print(lis)


使用children() 查找子元素

html = '''
    请在这里输入html代码
'''

from pyquery import PyQuery as pq
doc = pq(html)
items = doc('.list')          #查找class=list的标签
lis = items.children()        #获取class=list的子标签
print(lis)


父元素

#用例: 使用 parent()方法 选择父元素
html = '''
    请在这里输入html代码
'''

from pyquery import PyQuery as pq

doc = pq(html)
items = doc('.list')                      #查找class=list的标签
container = items.parent()                #查找class=list标签的父标签
print(container)


parents() 祖父元素

#用例:使用parents()方法 选择父元素
html = '''
    请在这里输入html代码
'''

from pyquery import PyQuery as pq

doc = pq(html)
items = doc('.list')
parents = items.parents()
print(parents)
#这里我增加了一层 wrap,这样返回了所有的父元素

#下面的选择器 将再次筛选 选择器的选择 让我们看看结果
parent = items.parents('.wrap')
print(parent)


兄弟元素 siblings()

#用例:有关于siblings()的使用
html = '''
    请在这里输入html代码
'''

from pyquery import PyQuery as pq
doc = pq(html)
li = doc('.list .item-0.active')
print(li.siblings())
print(li.siblings('.active'))


多元素查找

#用例: 多个元素遍历选择
#如果我们选择的是多个元素,我们则需要使用items()方法对其遍历
html = '''
    请在这里输入html代码
'''

from pyquery import PyQuery as pq

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


获取属性

#获取信息

#用例: 获取属性
html = '''
   请在这里输入html代码 
'''

from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.attr('href'))        #以attr获取href的值
print(a.attr.href)           #两种方法是一致的,用来获取属性的值


#用例: 获取文本
html = '''
    请在这里输入html代码 
'''

from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active a')
print(a)
print(a.text())              #获取a标签text文本


获取html

#用例: 获取HTML
html = '''
    请在这里输入html代码
'''

from pyquery import PyQuery as pq
doc = pq(html)
a = doc('.item-0.active')
print(a)
print(a.html())       #获取a的html文本


DOM操作

#DOM操作
#addClass 和 removeClass 
html = '''
    请在这里输入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

#用例: attr 和 css 
html = '''
    请在这里输入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()

#用例: remove    (相对使用比较频繁噢)
html = '''
<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())
wrap.find('p').remove()     #移除p标签
print(wrap.text())



使用CSS选择特定的标签

#使用CSS3 特定的伪类选择器,选择特定的标签
#用例: 伪类选择器
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)
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


小白笔记 如有错误 请提醒修改