#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())