PyQuery模块

作者: udhga | 来源:发表于2019-04-24 17:02 被阅读1次

    原文连接:http://www.nnzhp.cn/archives/630

    PyQuery模块也是一个解析html的一个模块,它和Beautiful Soup用起来差不多,它是jquery实现的,和jquery语法差不多,会用jquery的人用起来就比较方便了。

    Pyquery需要依赖lxml模块,不装的话,使用会报错。

    安装

    pip install lxml
    pip install pyquery
    

    解析html的3种方式

    from pyquery import PyQuery
    html = """
    <html><head><title>BestTest</title></head>
    <body>
    <div>
    <p class="content">最专业的软件测试培训
    <a href="http://www.besttest.cn" class="link" id="link1"><!--首页--></a>,
    <a href="http://www.besttest.cn/page/3.html" class="link" id="link2">BestTest性能测试</a> and
    <a href="http://www.besttest.cn/page/47.html" class="link" id="link3" target="_blank">BestTest自动化测试</a>;
    课程详情请点击上面的链接.</p>
    <p class="content">.这是广告植入.</p>
    <p class="title">BestTest is best</p>
    </div>
    </body>
    </html>
    """
    # 解析html的3种方式
    doc = PyQuery(url='http://www.nnzhp.cn') #指定url
    doc2 = PyQuery(html) #指定html字符串
    doc3 = PyQuery(filename='index.html') #指定文件
    print(doc)
    print(doc2)
    print(doc3)
    

    css选择器

    css在bs模块里面也用过,用法差不多。具体如下

    # css选择器
    print(doc2('.link')) #通过class
    print(doc2('#link1')) #通过id
    print(doc2('.content,#link1')) #找到所有class为content和id为link1的
    print(doc2('.content #link1')) #在content下面找到id为link1的元素
    print(doc2('a'))#找到所有的a标签
    print(doc2('[href]'))#找到所有带有href属性的元素
    print(doc2('a[target=_blank]')#找到a标签下面target为_blank的
    

    常用方法

    eq方法,获取第几个元素
     
    a_tags = doc2('a')
    print(a_tags.eq(0))#a标签里面第一个
    print(a_tags.eq(1))#a标签里面第二个
     
    # items()
        #如果找到多个元素的话,想循环取元素的话,就得用.items()方法,items就是为了循环用的
    a_tag = doc2('a')
    for a in a_tag.items():
        print(a.text())
    
    # text() 、html()
    #text()方法是获取元素里面的文字的,html()是获取元素的html
     
    a=doc2('.content')
    print(a.html()) #html格式的
    print(a.text()) #只有里面的文字
     
    #find方法,查找元素
     
    print(doc2.find('p').find('a'))#从所有的p标签里面找到a标签
    print(doc2.find('p'))#找到所有的p标签
    print(doc2.find('.content'))#找到所有class为content的
     
    #filter方法,用来筛选
    print(doc2.find('a').filter('#link1')) #先找到a标签,然后从a标签里面筛选出来id为link1的
     
    #attr方法,获取属性
     
    print(doc2('#link1').attr(('href')))#获取id为link1的href的属性值
    

    个人新增

    In [103]: html='''<a href="https://www.google.com" class="a1_test" id="link1">home</a>,
       .....: <a href="https://www.google.com" class="a2_test test" id="link2">BestTest</a>
       .....: <div class="div_test">
       .....: <div>div test</div>
       .....: <span>span test1</span>
       .....: <span>span test2</span>
       .....: </div>
       .....: '''
    In [104]: doc=PyQuery(html)
    
    

    对于class有多个属性的选择

    In [107]: doc('.a2_test.test')
    Out[107]: [<a#link2.a2_test.test>]
    

    标签嵌套获取(子标签)

    In [110]: doc('.div_test > div')
    Out[110]: [<div>]
    
    In [111]: doc('.div_test > div').text()
    Out[111]: 'div test'
    

    标签嵌套有相同的标签(子标签)

    In [112]: doc('.div_test > span')
    Out[112]: [<span>, <span>]
    
    In [113]: doc('.div_test > span').eq(0).text()
    Out[113]: 'span test1'
    
    

    相关文章

      网友评论

        本文标题:PyQuery模块

        本文链接:https://www.haomeiwen.com/subject/rxzggqtx.html