爬虫 ---- BeautifulSoup的基础使用


#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格式的文档,但其速度慢,不依赖外部扩展。
原文地址:https://www.cnblogs.com/lovele-/p/9225925.html