什么是BeautifulSoup?

    灵活又方便的网页解析库,处理高效,支持多种解析器

    利用它不用编写正则表达式,即可方便地实现网页信息的处理


环境:windows

模块:BeautifulSoup


BeautifulSoup 解析库用法详解

解析器            使用方法                 优势                                劣势
Python标准库     BeautifulSoup(markup,'html.parnser')  python内置标准库,速度适中,文档容错强       python2.7.3 or 3.2.2 中文容错差
lxml HTML解析器   BeautifulSoup(markup,'lxml')      速度快,文档容错能力强               需要安装C语言库
lxml XML解析器    BeautifulSoup(markup,'xml')       速度快,唯一支持xml的解析器            需要安装C语言库
html5lib       BeautifulSoup(markup,'html5lib')    容错最好,以浏览器的方式解析,生成html5格式的文档  速度慢,不依赖外部扩展

#markup这里为变量   即传入的参数


一个简单的例子:

from bs4 import BeautifulSoup

html = '''html网页源代码'''    #换成你要输入的html代码

soup = BeautifulSoup(html,'lxml')  
print(soup.prettify())        #把html格式化成标准html格式
print(soup.title.string)        #选择出title


soup的方法:

soup.prettify()      #把html格式化成标准html格式
soup.title         #提取网页中的title
soup.body         #提取网页中的body
soup.head         #提取网页心中的head
soup.p           #提取网页中的p标签,如果有多个p标签, 这里只返回第一个
'''  同样还有很多标签都是可以提取的  这里不一一介绍 '''


soup.title.name             #获取标签的名字   比如说title标签的名字还是title
soup.title.string            #获取title标签中的内容(内容中不含标签)
'''这里的title同样可以换成其他的标签'''
soup.head.title.string            #获取head中title的内容(内容中不含标签)
''' 还可以嵌套   用 . 来分隔 进行嵌套选择 '''


#获取属性
soup.p.attrs['name']         #获取p标签中name属性名称
soup.p['name']            #与上面一样,意义也是相同 只是用法不一样


#子节点和子孙节点的选择 父节点和祖先节点
soup.p.contents              #获取p标签的子节点
soup.p.children              #获取p标签的子节点  注意:这里需要循环打印
soup.p.descendants             #获取p标签的子孙节点 子节点及孙节点
soup.p.parent               #获取p标签的父节点
soup.p.parents               #获取p标签的祖父节点 注意:需循环打印
soup.a.next_siblings            #获取选择标签 a 后面所有的兄弟节点
soup.a.previous_siblings          #获取选择标签 a 前面所有的兄弟节点


标准选择器

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

    #类似正则的findall,找出所有的

    #可根据标签名,属性,内容 查找文档

soup.find_all('ul'))             #找出所有的ul标签
soup.find_all('ul')[0]            #找出第一个ul标签
soup.body.find_all('ul')           #找出body中的ul标签   
soup.find_all(attrs={'id':'list-1'})      #找出属性id=list-1的标签   
soup.find_all(id='list-1')          #同上 只是写法不一样
soup.find_all(attrs={'name':'elements'})      #找出属性name=elements的标签  
soup.find_all(id='list-1')          #同上  只是写法不一样
soup.find_all(text='Foo')          #找出所有的text=Foo的标签
 '''find ,与find_all不同, find用来返回单个元素  含有多个元素时之返回第一个'''

#find 同样可以这样用
find_parents()             #返回所有祖先节点, 用法同上
find_parent()              #返回直接父节点,用法同上
find_next_siblings()             #返回后面所有兄弟节点
find_next_sibling()             #返回后面第一个兄弟节点
find_previous_siblings()             #返回前面所有兄弟节点
find_previous_sibling()             #返回前面第一个兄弟节点
find_all_next()             #返回节点后所有符合条件的节点
find_next()               #返回节点后第一个符合条件的节点
find_all_previous()             #返回节点前所有符合条件的节点
find_all_previou()             #返回节点前第一个符合条件的节点


'''#CSS 选择器   通过select()直接传入CSS选择器即可完成选择'''
soup.select('.panel .panel-heading')     #找到class=panel标签中class=panel-heading标签 节点在class里,则前面要加一个 .  
soup.select('ul li')             #选择ul标签里面的li标签 以列表形式返回
soup.select('#list-2 .element')        #选择节点为id=list-2,且内容在class=element中的内容  节点在id里,前面要加一个 #  
soup.select('ul')[0])             #打印第一个ul节点的类型


ul['id']            #用来获取id里面的值
ul.attrs['id']         #同上
li.get_text()         #获取li标签里面的内容
li.get('src')          #获取li标签中的src的值


小白笔记  如有错误 请提醒修改