#BeautifulSoup的基础使用
from bs4 import BeautifulSoup #导入bs4库
html = "<p class='stylecss'><!--index page--></p><div id='divid'><ul id='ulid'><li>Menu Title</li><li>Body Content</li></ul></div><p>Ending</p>"
soup = BeautifulSoup(html ,"lxml") #创建对象
soup.p['class'] = 'newcss' #修改p标签的class
#获取p标签的class
print(soup.p.attrs)
print(soup.p.get('class'))
print(soup.p['class']) r = soup.find_all('p') #soup.find('p')显示第一个p标签及内容, .find_all显示所有的p标签及内容
r = soup.p # 同上一行find相同
r = soup.find(class_='stylecss') #获取class为stylecss的标签及内容
r = soup.find(attrs = {'class':'stylecss'}) # 获取标签的内容文本
r = soup.p.string
# cdata = CData(r)
# print(cdata)
r = soup.div.ul.li.string
# if type(soup.p.string)==Comment:
# r = soup.p.string
# print(r) r = soup.ul.contents[1] # .contents[1]获取ul列表的第二个标签及内容 # .descendants循环获取当前页面的所有标签和标签内的内容
for child in soup.descendants:
print(child) # .strings循环获取页面中显示的所有文本内容,不包括注释内容
for string in soup.strings:
print(string) p = soup.li.parent.name # .parent获取页面中li的父级标签名 # .parents递归得到当前元素的所有父级标签节点名
li = soup.li.string
for parent in li.parents:
print(parent.name) r = soup.ul.find_parent() #获取当前节点标签的父节点及内容
r = soup.li.find_parents() #获取当前节点标签的所有父节点及内容
r = soup.ul.find_all_previous() r = soup.select('p') #获取所有的p标签及内容
r = soup.select('p')[1] #获取页面中的第二个p标签及内容
r = soup.select('#divid')
r = soup.select('.stylecss')
r = soup.select('div > ul')
r = soup.select('ul > li')[1].get_text() print(r)
Python解析器

1、Python标准库 ,使用方法:BeautifulSoup(markup, “html.parser”) ,优势:Python的内置标准库、执行速度适中、文档容错能力强

2、lxml HTML 解析器 ,使用方法:BeautifulSoup(markup, “lxml”)     ,优势:速度快、文档容错能力强,但需要安装C语言库。

3、lxml XML 解析器 ,使用方法:BeautifulSoup(markup, [“lxml”, “xml”]) 或 BeautifulSoup(markup, “xml”) ,优势:速度快、唯一支持XML的解析器,也需要安装C语言库。

4、html5lib ,使用方法:BeautifulSoup(markup, “html5lib”) ,优势:最好的容错性、以浏览器的方式解析文档、生成HTML5格式的文档,但其速度慢,不依赖外部扩展。
05-18 22:51