zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    Linked List Cycle leetcode java (链表检测环)
    Remove Duplicates from Sorted List II leetcode java
    Remove Duplicates from Sorted List leetcode java
    Merge Two Sorted Lists leetcode java
    Swap Nodes in Pairs leetcode java
    Median of Two Sorted Array leetcode java
    阿里云最便宜的四种域名注册
    nohup和&后台运行,进程查看及终止
    ipv6转ipv4 NAT64与DNS64基本原理概述
    ros使用pppoe拨号获取ipv6,并且下发IPV6的dns到客户机win7
  • 原文地址:https://www.cnblogs.com/sunlizhao/p/9202862.html
Copyright © 2011-2022 走看看