zoukankan      html  css  js  c++  java
  • 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]='/'



  • 相关阅读:
    十大排序算法总结
    Java Web之监听器
    JVM 内存模型
    设计模式--装饰者模式和建造者模式
    Java Web之过滤器
    jsp-servlet篇(三)
    jsp- servlet篇(二)
    jsp- servlet篇(一)
    xml和xml解析
    k8s环境部署(一)
  • 原文地址:https://www.cnblogs.com/taonull/p/3903994.html
Copyright © 2011-2022 走看看