美文网首页
数据分析 | 五、BeautifulSoup4使用文档

数据分析 | 五、BeautifulSoup4使用文档

作者: 侯遇山 | 来源:发表于2017-12-18 21:49 被阅读0次

    一、BeautifulSoup4

    1.1  Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:Tag,NavigableString,BeautifulSoup,Comment。

    二、 Tag对象:与xml或html原生文档中的对象相同

    2.1  Tag对象的属性name:.name获取名字。

    2.2  Tag对象的属性attributes:可以被添加、删除、修改

    三、 BeautifulSoup对象:表示的是一个文档的全部内容,一般可以当作tag对象。他支持遍历文档树,和搜索文档树中的大部分方法。他没有name,和attribute属性。(他有个特殊属性:.name返回[document])

    四、方法:遍历文档树

    4.1  子节点(bf中字符串没有子节点):操作文档树最简单的方法就是告诉Tag的name,例如:想获取<head>标签,只需 soup.head     

            soup.标签名

           .contents  将tag的子节点以列表方式输出、.children 可以对Tag的子节点进行循环。(输出子节点)

          .descondants 可以对Tag的所有子孙节点进行输出。

          .string 如果tag只有NavigableString类型子节点,可以用.stirng获取子节点。

           .stripped_strings可以去除多余的空格。

    4.2  父节点

           .parent 来获取父节点,文档的顶层节点比如的父节点是BeautifulSoup对象,BeautifulSoup对象的.parent是None。

           .parents  获取所有父节点。

           .next_sibling 和 .previous_sibling

          .next_sibling和.previous_sibling  属性来查询兄弟节点

          .next_siblings 和 .previous_siblings  通过.next_siblings和.previous_siblings属性可以对当前节点的兄弟节点迭代输出

         .next_element属性指向解析过程中下一个被解析的对象(字符串或tag),结果可能与.next_sibling相同,但通常是不一样的.

         .previous_element属性刚好与.next_element相反,它指向当前被解析的对象的前一个解析对象.

          .next_elements和.previous_elements的迭代器就可以向前或向后访问文档的解析内容,就好像文档正在被解析一样

    4.3 过滤器

    1.字符串  

    2. 正则表达式

    3. 列表

    4. true :True可以匹配任何值,下面代码查找到所有的tag,但是不会返回字符串节点

    4.4  方法

    如果没有合适过滤器,那么还可以定义一个方法,方法只接受一个元素参数[4],如果这个方法返回True表示当前元素匹配并且被找到,如果不是则反回False

    1.  find_all()

    find_all(name,attrs,recursive,text,**kwargs)

    find_all()方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件.

    2.  name

    name参数可以查找所有名字为name的tag,字符串对象会被自动忽略掉.

    3. keywork

    4. 按css搜索  按照CSS类名搜索tag的功能非常实用

    soup.find_all("a",class_="sister")

    soup.find_all(class_=re.compile("itl"))

    soup.find_all("a",attrs={"class":"sister"})

    5.text参数

    通过text参数可以搜搜文档中的字符串内容.

    6. limit参数

    7. recursive

    调用tag的find_all()方法时,Beautiful Soup会检索当前tag的所有子孙节点,如果只想搜索tag的直接子节点,可以使用参数recursive=False.

    待续。。。

    相关文章

      网友评论

          本文标题:数据分析 | 五、BeautifulSoup4使用文档

          本文链接:https://www.haomeiwen.com/subject/mdqvwxtx.html