bs4
from bs4 import BeautifulSoup from bs4.element import * data = """ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>beatifulsoup learning note</title> <head> <body> <div id='id1' class = 'parent'> <span>i`m son1 <i>哈哈</i> </span> <span>i`m son2 </span> </div> <div id='id2', class = 'parent2'> <span>i`m son1 </span> <span>i`m son2 </span> </div> <div>哇哈哈</div> </body> </html> """ soup = BeautifulSoup(data, 'html.parser') # 创建一个实例,并制定解析引擎 #bs4 中的四大对象,Tag, NavigableString, BeautifulSoup, and Comment #Tag 类似xml,html中的标签,如果学过html的话应该很好理解 #tag 标签都有共同的属性name, attrs 每个属性都以键值对形式存放 #print(soup.head.name) #title #print(soup.title) #meta #print(soup.meta.attrs)# attrs 所有属性 #print(soup.meta['content']) #访问content属性 #print(soup.meta.has_attr('content')) #判断是否含有某个属性 #header #print(soup.head) #body #print(soup.body) #=====================BeautifulSoup=======================类似html中的顶层对象 document? #print(type(soup)) #'bs4.BeautifulSoup' #print(type(soup.head)) #<class 'bs4.element.Tag'> 嗯暂时就这样理解吧 #=====================NavigableString=====================文本节点,文本字符串 #parent1 = soup.find_all('div') #返回的是 bs4.element.ResultSet包含所有的tag #print(list(parent1)) parent1 = soup.find('div', id = 'id1') #找到属性为id1的标签 #print(parent1.name) #div #print(list(parent1.children)) #返回所有的子节点 ['\n', <span>i`m son1</span>, '\n', <span>i`m son2</span>, '\n'] #值得注意的是 children是一个可迭代对象,需要去遍历 当然我们可以通过contents直接取list #不要忘了\n \t 也是一种节点,容易忽略的地方 #print(parent1.contents) #['\n', <span>i`m son1</span>, '\n', <span>i`m son2</span>, '\n'] # 第一个span #print(parent1.span)#<span>i`m son1 </span> # span中的文本 #print(parent1.span.string) #可以发现 string只获得纯文本,并包含子节点文本 此时返回了None #print(parent1.span.text) #可以返回所有的文本 #print(parent1.get_text(strip = True)) #去除换行 #============================next_sibling, next_element, previous_element, previous_sibling, parent, next_siblings============== #print(parent1.next_sibling.next_sibling) # 注意这里是两个next 因为之前说过\n也是一个节点 s #print(parent1.next_element.next_element)# <span>i`m son1 <i>哈哈</i> </span> #print(list(parent1.next_siblings)) #所有的兄弟节点 #print(list(parent1.next_elements)) #当前节点下的所有节点,包括兄弟节点, 子节点 #以上只是总结常用的一些属性,方法,bs4是一个很强大的库,能够处理很复杂的数据环境,远不止这些。