python爬虫教程(七):pyquery库

大家好,今天为大家带来的是爬虫解析库中的pyquery。

一、示例

下面给出一个十分简单的示例,让大家对pyquery有一个直观的印象:

#导包
from pyquery import PyQuery as pq
# 初始化
text = '''

'''
doc = pq(text)
print(doc('li'))

结果如下:

  • 你好 白菜,你好,我是黑菜 白菜,你好,你好 我是一个小白菜 大白菜 黑彩
  • 二、初始化

    方法一:字符串

    将html代码字符串化,然后传给PyQuery类,如下:

    #导包
    from pyquery import PyQuery as pq
    # 初始化
    text = '''
    
    '''
    doc = pq(text)
    print(type(doc))

    结果如下:

    方法二:url

    直接将url传给PyQuery类,如下:

    #导包
    from pyquery import PyQuery as pq
    # 初始化
    doc = pq(url='https://www.baidu.com')
    print(doc)

    结果如下:

     
    # 部分结果

    方法三:文件

    直接指定文件名,当然文件内容是html代码,如下:

    #导包
    from pyquery import PyQuery as pq
    # 初始化
    doc = pq(filename='../06 re/bizhi.html') # 这里大家要自己修改一下文件路径
    print(doc)

    结果如下:

    
    
    
    4K鍔ㄦ极澹佺焊_楂樻竻4K鍔ㄦ极鍥剧墖_褰煎哺鍥剧綉
    
    

    三、选择元素

    1.css选择器:

    语法:xxx('css语法')

    作用:返回符合条件的所有的节点

    这个主要考察css语法,如果不会的朋友我之后会专门写篇文章来讲解css语法和html语法。这里就不赘述

    示例:

    #导包
    from pyquery import PyQuery as pq
    # 初始化
    text = '''
    
    '''
    # 初始化
    doc = pq(text)
    # 1: 选择第一个a标签
    print(doc('.hello'))
    # 2: 选择所有class等于white的标签
    print(doc('.white'))

    结果如下:

    你好
            
    白菜,你好,我是黑菜
    白菜,你好,你好
    我是一个小白菜
    大白菜

    2.方法选择:

    除去css语法外,还可以使用一些内置的方法,如:children、find等等。

    方法一:find方法

    语法:xxx.find('css语法')

    作用:查找出所有符合条件的子节点

    示例:

    #导包
    from pyquery import PyQuery as pq
    # 初始化
    text = '''
    
    '''
    # 初始化
    doc = pq(text)
    # 1: 选择所有class等于white的标签
    print(doc.find('.white'))

    结果如下:

    白菜,你好,我是黑菜
    白菜,你好,你好
    我是一个小白菜
    大白菜

    方法二:children方法

    语法:xxx.children('css语法')

    作用:查找所有符合条件的直接子节点

    示例:

    #导包
    from pyquery import PyQuery as pq
    # 初始化
    text = '''
    
    '''
    # 初始化
    doc = pq(text)
    # 1: 选择所有class等于white的标签
    print(doc.find('li .test').children('a'))

    结果如下:

    直接子节点
    直接子节点

    方法三:parent和parents方法

    语法:xx.parent('css语法')  or    xxx.parents('css语法')

    作用:parent是获取所有符合条件的父节点,而parents是获取所有符合条件的祖先节点。

    示例:

    #导包
    from pyquery import PyQuery as pq
    # 初始化
    text = '''
    
    '''
    # 初始化
    doc = pq(text)
    # 1: 选择所有class等于white的标签
    a_tag = doc.find('li .test div').children('a')
    print(a_tag.parent('.test'))    # 无结果,因为不是直接父节点
    print(a_tag.parents('.test'))

    结果如下:

    方法四:siblings

    语法:xxx.siblings('css语法')

    作用:获取所有符合条件的兄弟节点

    示例:

    #导包
    from pyquery import PyQuery as pq
    # 初始化
    text = '''
    
    '''
    # 初始化
    doc = pq(text)
    # 1: 选择一个a节点
    a_tag = doc('.black')
    print(a_tag.siblings('.white'))

    结果如下:

    大白菜
    我是一个小白菜
    白菜,你好,你好
    白菜,你好,我是黑菜

    四、遍历

    因为这里选取的所有节点返回的结果不是列表类型,而是pyquery类型,如下:

    #导包
    from pyquery import PyQuery as pq
    # 初始化
    text = '''
    
    '''
    # 初始化
    doc = pq(text)
    # 1: 选择一个a节点
    a_tag = doc('.black')
    print(type(a_tag.siblings('.white')))

    结果如下:

    因此,需要使用特殊的方法进行遍历,即xxx.items(),这个方法的作用是得到一个生成器,可以循环调用,如下:

    #导包
    from pyquery import PyQuery as pq
    # 初始化
    text = '''
    
    '''
    # 初始化
    doc = pq(text)
    a_tags = doc('.white')
    print(type(a_tags.items()))
    print('-'*50)
    for a in a_tags.items():
        print(a)

    结果如下:

    
    --------------------------------------------------
    白菜,你好,我是黑菜
            
    白菜,你好,你好
            
    我是一个小白菜
            
    大白菜

    五、获取信息

    提取到元素后就要获取信息,方法如下:

    获取属性:

    方法:xxx.attr('属性名字')

    示例:

    #导包
    from pyquery import PyQuery as pq
    # 初始化
    text = '''
    
    '''
    # 初始化
    doc = pq(text)
    # 1: 选择一个a节点
    a_tag = doc('.black')
    siblings_tag = a_tag.siblings('.white').items()
    for tag in siblings_tag:
        print(tag.attr('class'))

    结果如下:

    white
    white
    white
    white

    获取文本:

    方法一:xxx.text()

    作用:获取内部所有的文本信息,不包含节点信息,整体是一个字符串,如果选中的是多个节点,则不同节点之间内容以空格隔开

    如下:

    一个节点

    #导包
    from pyquery import PyQuery as pq
    # 初始化
    text = '''
    
    '''
    # 初始化
    doc = pq(text)
    # 1: 获取div(class=test)标签
    div_tag = doc('.test')
    print(div_tag.text())

    结果如下:

    # 不包含节点信息,只是一个字符串,而不是三个
    直接子节点
    不是直接子节点
    直接子节点

    多个节点:

    #导包
    from pyquery import PyQuery as pq
    # 初始化
    text = '''
    
    '''
    # 初始化
    doc = pq(text)
    # 1: 获取div(class=test)标签
    a_tags = doc('.white')
    print(a_tags.text())

    结果如下:

    白菜,你好,我是黑菜 白菜,你好,你好 我是一个小白菜 大白菜
    # 一个字符串,不用标签之间以空格隔开

    方法二:xxx.html()

    作用:返回字符串,包含节点信息,如果选中多个节点,返回第一个节点的文本。

    如下:

    #导包
    from pyquery import PyQuery as pq
    # 初始化
    text = '''
    
    '''
    # 初始化
    doc = pq(text)
    # 1: 单个节点
    div_tag = doc('.test')
    print(div_tag.html())
    print('-'*50)
    #2 : 多个节点
    a_tags = doc('.white')
    print(a_tags.html())

    结果如下:

      直接子节点
                
                直接子节点
            
    --------------------------------------------------
    白菜,你好,我是黑菜

    六、节点操作

    节点操作,主要用于信息提取中,有时候可以有效去掉杂质信息。

    方法一:改变class属性值

    添加class属性:xxx.addClass('class值')

    删除class属性:xxx.removeClass('class属性值')

    方法二:改变属性值

    方法:xxx.attr('属性名字','属性值')

    方法三:改变标签内容

    方法:xx.text('只改变文本')

    方法:xxx.html('可以写html代码或者文本')

    方法四:删除节点

    方法:xxx.remove()

    以上四种方法只要用于提取信息,因为有时候我们提取的信息有一些杂质,我们可以把这些杂质删除或者修改class值等等来达到提纯的目的。

    pyquery库就到此为止,这个库建议学习过css的同学来用,谢谢大家。

    你可能感兴趣的:(爬虫系列教程,爬虫,python,开发语言)