BeautifulSoup模块

       一、BeautifulSoup模块基本使用

       soup=BeautifulSoup(解析内容,'html.parser(解析器)')                              生成document对象

       soup=BeautifulSoup(解析内容,features='lxml')                                        lxml与html.parser都是解析器,但是lxml是第三方模块,同时性能比内置的html.parser高

       d1=soup.find()                                                                                          返回第一个匹配的标签对象  

       d2=soup.find_all()                                                                                    返回所有匹配的标签对象

 

        二、find与find_all的参数

       name=''                                                                                                    标签名

       id=''                                                                                                          标签的ID值

       class_                                                                                                      标签的类名

       href=                                                                                                        链接地址

       attrs={'属性':'属性值'}                                                                               指定查找标签的属性与属性值,所有属性都可以指定 

       recursive                                                                                                  是否递归查找标签,为True时会在标签对象的所有下级标签中查找满足条件的标签

       text=''                                                                                                       标签内部文本

       limit=                                                                                                        find_all方法指定查找多少个满足条件的标签

       注:find_all的参数传值时除了可以使用指定的值之外还可以使用函数和正则表达式,name,class_,text,id,href参数还可以赋值列表

=======赋值列表===========
v=soup.find_all(name=['a','div'])
print(v)


=======赋值正则表达式=======
import re
rep=re.compile('p')
v=soup.find_all(name=rep)
print(v)


=======赋值函数==========
def  func(tag):
    return tag.has_attr('class') and has_attr('id')
v=soup.find_all(name=func)
print(v)

 

       三、标签对象的方法和属性

       标签对象.attrs                                                                                                    返回标签属性与属性值的字典

       标签对象.get('value')                                                                                          获取指定的标签对象     

       标签对象.name                                                                                                  获取标签名
       标签对象.children                                                                                              获取标签对象的所有子标签包括文本 使用类型判断排除文本
       标签对象.descendants                                                                                      获取标签对象的所有下级标签
       标签对象.clear                                                                                                   删除所有子标签
       标签对象.decompose()                                                                                      递归删除所有标签
       标签对象.extract()                                                                                              删除标签并返回,该标签为其他标签的子标签
       标签对象.decode()|decode_contents()                                                              将标签对象转换为字符串|将标签对象的内容转换为字符串
       标签对象.encode()|encode_contents()                                                              将标签对象转换为字节|将标签对象的内容转换为字节
       标签对象.has_attr()                                                                                            检查标签对象有没有指定的属性
       标签对象.get_text()                                                                                            获取标签对象的内部文本

       标签对象.index(标签对象)                                                                                  获取标签对象在指定标签的索引位置
       标签对象.is_empty_element                                                                              是否是空标签或者自闭合标签
       标签对象.select(css选择器)                                                                               等于find_all ,如tag.select('a[href*="正则"]')
       标签对象.select_one(css选择器)                                                                       等于find
       标签对象.string                                                                                                  获取标签文本,还可以设置
       标签对象.stripped_strings                                                                                 递归获取所有标签的文本
       标签对象.append(标签对象)                                                                              在标签内追加标签

      标签对象.insert(索引,标签对象)                                                                          在标签内部指定索引位置插入新标签
      标签对象.insert_after|insert_before                                                                    在标签前面或后面插入新标签
      标签对象.replace_with()                                                                                      将标签对象替换为其他标签
      标签对象.setup(previous_sibling=标签对象)                                                        通过两个标签之间的关系插入标签
      标签对象.wrap()                                                                                                   用指定标签包裹当前标签 
      标签对象.unwrap()                                                                                               去掉当前标签,保留其包裹的标签

      标签对象.(next,next_element,next_elements,next_sibling,next_siblings,previous.....,parent,parents)                     通过关系查找标签
      标签对象.find_next()|find_all_next(),find_next_sibling()|find_next_siblings()|find_previous,......|find_parent()|find_parents() 参数同find_all      与上面类似

 

       补充:通过Tag模块创建标签

from bs4.element import Tag
Tag()   #创建标签,参数同find  

 

posted @ 2017-11-07 18:56  魅力宁波  阅读(151)  评论(0)    收藏  举报