• Python之BeautifulSoup常用详细使用


    因工作需要,日常工作中有不少时间是用在了反复登陆内网。

    故详细研究测试了BeautifulSoup的用法,总结下来备用爬网页之需。

    首先是导入模块并初始化了:

     
    from bs4 import BeautifulSoup
    soup=BeautifulSoup(opener)

    #1、tag标签法
    如果一层层的标签包下去,只取每层标签第一个,或只有唯一一个时,可以用

    soup.head.title


    但并行多个同名标签的则不能title[2]之类查找

    #2、contents法
    根据文档树进行搜索,返回标记对象(tag)的列表,注意,直接.contents,返回的是列表,不是单一元素
    使用contents向后遍历树,使用parent向前遍历树

    共两种用法:

    soup.contents
    
    soup.contents[x].contents


    返回值是包含html标签全部内容的列表。比如可能是三元素:[u' ','<html>xxxx</html>',u' ']
    soup.contents[x]则是对列表各元素值的获取了

    soup.contents[x].contents


    返回值是目标标签的下一层(即为该标签为父,则抓取到的都是子的列表)全部标签的列表。这里如果x取错,可能会导致
    错误,因为取错则生不成列表,后面contents会弹错。

    1 soup.contents[1]=u'HTML'

    2 soup.contents[2]=u' '

    3 soup.contents[3]=<html>...</html> 

    soup.contents[3].contents=[u'
    ',<head>...</head>,u'
    ',<body>...</body>,u'
    ']


    以此类推,soup.contents[3].contents[3]=肯定是上述列表中的第四个元素body。

    #3、.next法
    只能针对单一元素进行.next,或者说是对contents列表元素的挨个清点。
    比如

    soup.contents[1]=u'HTML'
    soup.contents[2]=u'
    '

    则soup.contents[1].next等价于soup.contents[2]

    #搜索法

    find(name=None, attrs={}, recursive=True, text=None, **kwargs)

    主要2个:.find('p'),.findAll('p')
    find返回的是字符串值,而且是返回从头查找到的第一个tag对。但是如果这第一个tag对包括大量的内容,父等级很高,则同时其内部所包含的

    此级标签也全部都find

    findAll返回值是个列表,如果发现了一个同名标签内含多个同名标签,则内部的标签一并归于该父标签显示,列表其他元素也不再体现那些内含

    的同名子标签。
    比如:

    soup.findAll(onclick='document.location...')
        soup.findAll(attrs={'style':r'outline:none;'}) #用来查找属性中有style='outline:none;的标签体。


    #4、.attrs[x]获取属性值法
    在上述各种方法找到唯一的标签体之后,可以通过对标签实施attrs,得到一个内部属性的列表。
    在标签后面新增.attrs['id']等等即可取得该标签内部id的属性值
    比如:

    soup.contents[3]==<meta abc='god' href='/'>
    soup.contents[3].attrs=={'abc':'god','href':'/'}
    soup.contents[3].attrs[1]='/'



  • 相关阅读:
    wzplayer for android V1.5 整合硬解码(仍然支持加密音视频)
    mac osx 快捷键
    从零开始学AS3游戏开发【七】永无终结,不断完善的游戏
    flash flex as3 类库 资料大全
    php include一个有全局变量的应注意
    MySQL事件调度器 CREATE EVENT
    The Miner – 专业Flash AS3性能分析器(profiler)入门教程
    as3加密入门1使用alchemy进行代码混淆
    从零开始学AS3游戏开发【五】 告别方块,添加碰撞
    PHP实现的Mysql读写分离
  • 原文地址:https://www.cnblogs.com/taonull/p/3903994.html
Copyright © 2020-2023  润新知