• pyquery


    如果你对web有所涉及,比较喜欢css选择器,对jquery有所了解,那么有一个更加适合你的解析库--pyquery

    初始化有多种方法比如传入字符串,传入url,传入文件名

    字符串初始化

    from pyquery import PyQuery as pq
    doc = pq(html)
    print(doc("li"))

    url初始化

    from pyquery import PyQuery as pq
    doc = pq(url="https://www.baidu.com)
    print(doc("title"))

    文件初始化

    from pyquery import PyQuery as pq
    doc = pq(filename = "demo.html")
    print(doc("head"))

    查找节点

    直接子节点 children()
    子孙节点 find()
    父节点 parent()
    祖先节点 parents()
    兄弟节点 siblings

    如果想要筛选某个祖先节点的话,可以像parents()方法传入css选择器,这样就会返回祖先节点中符合css选择器的节点

    items = doc(".list")
    print(items.parents(.warp))

    遍历

    pyquery的选择结果可能是多个节点,也可能是单个节点,类型都是PyQuery类型的

    对于单个节点,可以直接打印输出,也可以直接转为字符串

    print(doc("li"))
    print(str(doc("li")))

    对于多个节点就需要遍历了

    调用items()方法后,会得到一个生成器,就可以逐个得到节点对象,也是PyQuery类型的,每个节点对象还可以进行选择,非常灵活

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

    获取信息

    .text()方法,获取内部的文本信息,会忽略节点内部包含的所有html,只返回纯文本内容

    如果想要获取节点内部所有的html文本,就要使用.html()方法

    如果选中的结果有多个a节点

    a.html()方法返回第一个a节点内部html文本,如果想要获取全部的就需要遍历

    a.text()返回了所有的a节点内部的纯文本,中间用空格分割,返回结果是字符串

    节点操作

    提供了一系列方法对节点进行动态修改,比如为某一节点添加class,移除某个节点等

    addClass()和removeClass()动态改变节点的class属性

    a.addClass("active")    #添加class元素active
    a.removeClass("active")    #删除class元素active

    attr()方法对属性进行操作

    a.attr("name","link")

    text()和html()方法改变节点内部的内容

    a.text("hello world")
    a.html("<h1>hello world</h1>")

    remove()方法,顾名思义,就是移除

    a.children.remove()

    伪类选择器

    from pyquery import PyQuery as pq
    html = '''
    <li>1a</li>
    <li>2b</li>
    <li>3c</li>
    <li>4d</li>
    <li>5e</li>
    <li>6f</li>
    '''
    doc = pq(html)
    li = doc("li:first_child") #第一个li节点
    print(li)
    li = doc("li:last_child") #倒数第一个li节点
    print(li)
    li = doc("li:nth_child(4)") #指定li节点,从一开始
    print(li)
    li = doc("li:gt(1)") #第二个li之后的所有li节点
    print(li)
    li = doc("li:nth_child(2n)") #偶数位置的li节点,或者(even) 
    print(li)
    li = doc("li:nth_child(2n+1)")
    #奇数位置的li节点,或者(odd)
    print(li)
    li = doc("li:contains(a)") #包含内容a的节点,放数字会报错
    print(li)
  • 相关阅读:
    自定义能够for each的类,C#,Java,C++,C++/cli的实现方法
    答网友强护灰飞烟灭关于接口的问题
    浅谈C++的this指针
    padding与margin的区别(网上转的)
    啦啦啦 刚注册的,先水一篇~
    直接把页面的table导出到excel表中
    从FTP下载文件带进度条
    C# 从FTP上下载指定文件到本机
    “无法在证书存储区中找到清单签名证书”错误的解决方法
    网页设置不可复制
  • 原文地址:https://www.cnblogs.com/sunlizhao/p/9202862.html
Copyright © 2020-2023  润新知