• PyQuery库


    '''强大又灵活的网页解析库。如果你觉得正则写起来太麻烦,又觉得BeautifulSoup
    语法太难记,如果你熟悉jQuery的语法,那么PyQuery就是你的绝佳选择。'''
    from pyquery import PyQuery as pq
    '''初始化'''
    #字符串初始化
    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>
    '''
    doc = pq(html)
    print(doc('li')) #CSS选择器

    #URL初始化
    doc = pq(url="http://www.baidu.com")
    print(doc('head'))

    #文件初始化
    doc = pq(filename='demo.html')
    print(doc('li'))

    '''基本CSS选择器'''
    print("-基本CSS选择器-"*20)
    doc = pq(html)
    print(doc("#container .list li")) #空格表示子孙关系,非直接父子关系
    #子元素
    items = doc(".list")
    print(type(items),items)
    ## find()是在当前items元素下查找
    lis = items.find('li')
    print(type(lis),lis)
    print(items.children())
    print(items.children('.active'))
    #父元素
    items = doc('.list')
    parents = items.parents() #返回所有的祖先元素
    print(parents)
    parent = items.parents('.wrap')
    print(parent)
    #兄弟元素
    li = doc(".list .item-0.active") #.item-0和.active之间无空格,表示并列同时满足,多类选择器。
    print(li.siblings())
    print(li.siblings('.active'))

    '''遍历'''
    print("-遍历-"*20)
    #单个元素
    li = doc(".item-0.active")
    print(li)
    #多个元素
    lis = doc('li').items()
    print(type(lis))
    for li in lis:
    print(li)

    '''获取信息'''
    print("-获取信息-"*20)
    #获取属性
    a = doc(".item-0.active a")
    print(a)
    print(a.attr('href'))
    print(a.attr.href)
    #获取文本
    a = doc(".item-0.active a")
    print(a.text())
    #获取HTML
    a = doc(".item-0.active")
    print(a)
    print(a.html()) #获取标签里边的HTML代码

    '''DOM操作'''
    print("-DOM操作-"*20)
    #addClass、removeClass
    li = doc('.item-0.active')
    print(li)
    li.removeClass('active') #将得到的li标签元素去除active类标签
    print(li)
    li.addClass('active') #将得到的li标签元素添加active类标签
    print(li)
    #attr、css
    li.attr('name','link') #添加name属性值为link
    print(li)
    li.css('font-size','14px') #添加一个css属性font-size值为14px
    print(li)
    #remove
    htm = '''
    <div class="wrap">
    Hello,World
    <p>This is a paragraph.</p>
    </div>
    '''
    do = pq(htm)
    wrap = do('.wrap')
    print(wrap.text())
    wrap.find('p').remove()
    print(wrap.text())

    '''伪类选择器'''
    print("-伪类选择器-"*20)
    li = doc("li:first-child") #得到第一个li
    print(li)
    li = doc("li:last-child") #得到最后一个li
    print(li)
    li = doc("li:nth-child(2)") #得到第二个li
    print(li)
    li = doc("li:gt(2)") #得到第二个以后的li
    print(li)
    li = doc("li:nth-child(2n)") #返回第偶数个li
    print(li)
    li = doc("li:contains(second)") #返回包含second内容的li
    print(li)
    更多伪类选择器用法参考:https://www.cnblogs.com/miss85246/p/10397601.html






  • 相关阅读:
    测试网络
    测试
    Centos6.6中VIM的编辑、退出与保存
    IP
    2018.12.24 课程更新内容到第五章 渗透测试 第4、5节
    利用GRC进行安全研究和审计 – 将无线电信号转换为数据包(转)
    我的翻译--一个针对TP-Link调试协议(TDDP)漏洞挖掘的故事
    我的翻译--针对Outernet卫星信号的逆向工程
    Sulley安装手记
    乘用车黑客手册(译)
  • 原文地址:https://www.cnblogs.com/wisir/p/10029001.html
Copyright © 2020-2023  润新知