python3 bs4库

#BeautifulSoup
#python 标准库    BeautifulSoup (markup,"html.parser")
#lxml HTML 解析器 BeautifulSoup (markup,"lxml")
#lxml XML 解析器 BeautifulSoup (markup,"xml")
#html5lib  BeautifulSoup (markup,"html5lib")
from bs4 import BeautifulSoup
html='''<html>
<head>
<title>This is test</title>
</head>
<body>
<p class='title' name='jmc'><b>the is jmc</b></p>
    <p class='story'>this is once test</p>
    <p name=''gomini></p>
    <a href="http://jmc.com" class='sister' id='test-1'></a>
    <a href="http://jmc.com" class='sister' id='test-2'></a>
<div class="panel_heading">
    <div class="panel_heading">
        <h4>hello</h4>
    <div>
    <div class="panel-body>
        <ul class="list" id="once">
            <li class="element">jmc</li>
            <li class="element">gomin</li>
            <li class="element">angy</li>
        </ul>
        <ul class="list2" id="two">
            <li class="element">jmc1</li>
            <li class="element">gomini2</li>
            <li class="element">jangy3</li>
        </ul>
    </div>
</div>

    '''

soup=BeautifulSoup(html,'lxml')
print (soup.prettify())#格式化代码,自动补全  处理。
print (soup.title.string)#打印出title

#标签选择器
#选择元素
print (soup.title)
print (soup.head)
print (soup.p)
#获取名称
print (soup.title.name) #获取title 的名称
print (soup.p.attrs['name']) #打印出p标签的name 值
print (soup.p['name'])#打印出p标签的name 值
#获取内容
print (soup.p.string)
print (soup.p.text)
#嵌套选择
print (soup.head.title.string)#head 中的title 文本
#子节点和子孙节点
print (soup.p.contents)#获取p标签的所有子节点
print (soup.p.children)
for i,child in enumerate(soup.p.children):
    print (i,child)   #i,child 接收索引和内容,迭代器 循环打出
print (soup.p.descendants)
for i,child in enumerate(soup.p.descendants):
    print (i,child)  #获取子孙节点,i,child 接收索引和内容

#父节点和祖先节点
print (soup.p.parent)#获取父节点
print (list(enumerate(soup.a.parents)))#获取祖先节点所有p的节点
#兄弟节点
print (list(enumerate(soup.p.next_siblings))) #p标签后面的兄弟节点,同一个父节点中的
print (list(enumerate(soup.p.previous_siblings)))#p标签前面的兄弟节点

#标准选择器
#find_all(name,attrs,recursive,text,**kwatgs)

print (soup.find_all('ul')) #find_all 查找所有,输出第一个ul标签
print (type(soup.find_all('ul')[0]))
for ul in soup.find_all('ul'):
    print (ul.find_all('li'))#从ul中打印li标签


#attrs
print (soup.find_all(attrs={"id":"two"}))
print (soup.find_all(id="two"))
print (soup.find_all(class_="element"))#class 要加_
#text
print (soup.find_all(text='jmc'))


#find 和find_all用法一样。
#find 返回单个元素,find_all返回所有元素
print (soup.find(text='jmc'))


find_parents() #返回所有的祖先节点
find_parent()    #返回所有的父节点
find_next_siblings() #返回后面所有的兄弟节点
find_next_sibling()#返回后面第一个兄弟节点
find_previous_siblings()#返回前面所有的兄弟节点
find_previous_sibling()#返回前面第一个兄弟节点
find_all_next()#返回节点后所有符合的节点
find_next()#返回第一个符合的节点



#CSS选择器
print (soup.select('ul li'))
for ul in soup.select('ul'):
    print(ul.select('li'))

for ul in soup.select('ul'):
    print (ul['id'])
print (soup.select('ul'))
print (soup.select(ul['id']))
#获取内容
for ul in soup.select('li'):
    print (ul.get_text())

 

posted @ 2019-04-08 14:22  G0mini  阅读(322)  评论(0编辑  收藏  举报