zoukankan      html  css  js  c++  java
  • pyquery 的使用

    pyquery 的使用

    跟XPath 和 BeautifulSoup类似的,pyquery也是一个解析库。像Beautiful Soup 一样,初始化pyquery的时候,也需要传入HTML文本来初始化一个pyquery对象。除此以外,还可以直接传入URL,传入文件名等。下面来详细介绍:

    from pyquery import PyQuery as pq
    
    html = '''
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <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"><a href="link3.html"><span class="bold">third item</span></a></li>
            <li class="item-1"><a href="link4.html">fifth item</a></li>
            <li class="item-0"><a href="link5.html">fifth item</a></li>
        </ul>
    </div>
    </body>
    </html>
    '''
    doc = pq(html)
    print(doc('li'))

     这里首先引入了PyQuery这个对象,取别名为pq,然后声明了一个HTML字符串,并将其当作参数传递给PyQuery对象,这样就完成了初始化了。接下来,将初始化的对象传入CSS选择器,就可以获取到相应的节点。除此以外,还可以传一个URL参数:

    from pyquery import PyQuery as pq
    
    doc = pq(url='https://www.cnblogs.com/jonas-von')
    print(doc('title'))

    结果打印输出我的博客的title内容。还可以通过文件的形式初始化:

    from pyquery import PyQuery as pq
    
    doc = pq(filename='test.html')
    print(doc('li'))

    当然,在本地需要有test.html这个文件。

    1. 基本选择器

    其实在上面的实例中也用到了CSS选择器,PyQuery实例对象的参数就是CSS选择器,这在里就不过多阐述了。

    2. 查找节点

    查找子节点,需要用到find()方法,此时传入的参数就是CSS选择器:

    from pyquery import PyQuery as pq
    
    doc = pq(filename='test.html')
    lis = doc('li')
    print(lis.find('.bold'))

    首先通过通过元素选择器选择了所有的li,然后调用find()方法,传入类选择器找到了class属性为bold的元素。从这里也可以看出,find()方法查找的范围是所有子孙节点,如果我们只想找子节点,可以用children()方法。

    查找父节点,可以使用parent()方法,如果需要查找祖先节点,可以使用parents()方法。

    查找兄弟节点,可以使用siblings()方法。

    3. 遍历

    从上面的实例可以得出结论:pyquery的选择结果可能是多个节点,也可以是一个节点,但无论是一个结果还是多个结果,类型都是PyQuery类型,并不像BeautifulSoup(一个结果直接返回,多个结果使用列表储存再返回)。对于单个节点,可以直接打印输出,也可以直接使用str()方法转化为字符串,但是对于多个节点,我们就需要遍历来获取了。

    from pyquery import PyQuery as pq
    
    doc = pq(filename='test.html')
    lis = doc('li').items()
    for li in lis:
        print(li,type(li))

    调用items()方法后,会得到一个生成器,遍历即可得到每个li对象了,这里的类型也是PyQuery对象。

    4. 获取信息

    提取到某个PyQuery对象后,可以通过attr()方法来获取属性:

    from pyquery import PyQuery as pq
    
    doc = pq(filename='test.html')
    print(doc('li span').attr('class'))

    需要注意的是,attr()方法返回的结果只有一个,无论选择器匹配的结果有多少个。所以,如果存在多个结果时,需要遍历来实现。

    调用text()方法来获取标签文本:

    from pyquery import PyQuery as pq
    
    doc = pq(filename='test.html')
    print(doc('li span').text())

    该方法会忽略HTMl标签,只返回纯文字文本,但如果需要获取html文本,可以使用html()方法,此时返回的是标签体!!但是需要注意一个问题,text()可以返回多个结果,而html()只返回第一个匹配的标签体文本,如果需要获取多个,则同样需要遍历。

    5. 节点操作

    pyquery提供了一系列方法来对节点进行动态修改(类似于jQuery),比如添加或移除一个class等操作:

    addClass 和 removeClass 

    前者用于添加class属性,后者用于删除class属性

    attr、text 和 html

    除了class 以外,可以通过attr()方法对属性进行操作,还可以使用text()和html()方法来改变标签内容。

    remove

    移除某个节点

  • 相关阅读:
    4/5邀请赛的选拔赛,闷声滚大粗
    4.5邀请赛的选拔赛,闷声滚大粗
    hdu3068&&hdu3294,回文串,Manacher算法
    hdu3068&&hdu3294,回文串,Manacher算法
    BC78,hdu5655,5656。%%%%CA娘
    BC78,hdu5655,5656。%%%%CA娘
    深度懵逼计算机系统。。。DataLab。。
    深度懵逼计算机系统。。。DataLab。。
    设置ecShop网店用户名和email均可登录
    ecshop新建增加独立页面的方法
  • 原文地址:https://www.cnblogs.com/jonas-von/p/9186837.html
Copyright © 2011-2022 走看看