• 爬虫基础 pyquery 详解




    # -*- coding:utf8 -*-
    # 工程路径:pyquery详解.py
    # 工程日期:10/6/2019
    # 工程目标:pyquery的使用
    
    #%% 使用pyquery解析网页元素
    html = '''
    <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 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>
    '''
    from pyquery import PyQuery as pq
    doc = pq(html)
    print(doc('li'))
    print(type(doc('li'))) # 是个pq的对象 # 基于CSS选择器选择元素
    
    
    #%% URL的直接初始化
    from pyquery import PyQuery as pq
    doc = pq(url='https://www.baidu.com')
    print(doc('head'))
    
    #%% 基于文件的初始化
    # 以文件的形式加载网页内容
    from pyquery import PyQuery as pq
    doc = pq(filename='文件路径')
    print(doc())
    
    #%% 基本的css选择器
    # css选择器中使用嵌套模式,并不一定是直接子对象,具有层级关系,就可以使用嵌套选择
    html = '''
    <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>
    '''
    from pyquery import PyQuery as pq
    doc = pq(html)
    print(doc('#container .list li'))  # 选出所有的li 标签
    # # 标识的为 id .
    # . 标识 class
    #  空格标识嵌套关系
    
    
    #%% 查找元素
    # 子元素的选择 find
    html = '''
    <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>
    '''
    from pyquery import PyQuery as pq
    doc = pq(html)
    item = doc('.list')
    print(item)  # 查找所有的 li 标签
    print(type(item))  # 查看返回的 item 类型 是pyquery对象类型
    lis = item.find('li')
    print(lis)
    print(doc.find('a'))  # 查找a标签
    # 该类型的对象任然可以进行迭代查找
    
    #%% 获取父元素, 兄弟元素, 子元素
    html = """
    <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>
    """
    
    from pyquery import PyQuery as pq
    doc = pq(html)
    item = doc('.list')
    container_p = item.parent() # 查找 属性为 list 的标签的 父标签
    container_ps = item.parents() # 查找属性为 list 标签的 祖先节点
    container_s = item.children() # 查找该标签的所有子孙节点
    container_si = doc('.list .item.active').siblings()  # 查找 属性为 list 的内层中的 包含item和active 属性的节点的兄弟节点
    print(container_s)
    print(container_ps)
    print(container_s)
    print(container_si)
    
    #%% 遍历元素
    # 遍历多个元素 .items (遍历结果中的多个元素)
    html = """
    <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>
    """
    
    from pyquery import PyQuery as pq
    doc = pq(html)
    lis = doc('li').items()
    for i in lis:
        print(i)
    
    
    #%% 获取标签的属性信息, 标签内容的文本信息
    html = """
    <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>
    """
    
    from pyquery import PyQuery as pq
    doc = pq(html)
    print(doc('.item-0.active a').attr('href')) # 获取class 为 item-0 active 的子标签 a 标签的中的 href 值
    print(doc('.item-0.active a').text())   # 获取该标签中的文本内容
    print(doc('.item-0.active').html())  # 获取该标签内层的HTML内容
    
    
    #%% dom 节点操作
    # addclass removeclass  添加删除class中的属性
    # attr 在class 中 添加属性
    # css  在标签中添加样式
    # remove 一出指定标签的标识符 <>
    # 其他方法http://pyquery.readthedocs.io/en/latest/api.html
    
    
    #%%  伪类选择器 符合css3的选择器标准
    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>
    '''
    from pyquery import PyQuery as pq
    doc = pq(html)
    li = doc('li:first-child')   # 获取 li 标签的第一个
    print(li)
    li = doc('li:last-child')    # 获取 li 标签的 最后一个
    print(li)
    li = doc('li:nth-child(2)')
    print(li)
    li = doc('li:gt(2)')
    print(li)
    li = doc('li:nth-child(2n)')  # 获取 02468 的li 标签
    print(li)
    li = doc('li:contains(second)')  # 获取内容包含 second 的 li 标签
    print(li)
  • 相关阅读:
    java.lang.UnsatisfiedLinkError:no dll in java.library.path终极解决之道
    JNA
    Java发邮件带附件测试通过
    Java-JDBC调用批处理、存储过程、事务
    Java的JDBC事务详解
    对只转发结果集的无效操作:last
    Servlet 监听器
    TOMCAT6热部署配置
    使用命名参数处理 CallableStatement
    如何在JTable中动态添加一行
  • 原文地址:https://www.cnblogs.com/binyang/p/10997122.html
Copyright © 2020-2023  润新知