首页 > 其他分享 >beautifulsoup

beautifulsoup

时间:2023-03-17 17:58:06浏览次数:40  
标签:lxml title 标签 beautifulsoup BeautifulSoup soup html

Beautifulsoup

html标签转化成树结构
结构化输出tag树

soup = BeautifulSoup(html_doc, 'html.parser')
print(soup.prettify())

按照点的方式寻找标签

soup.title	#title是标签的名字
# <title>The Dormouse's story</title>

soup.title.name	#title标签的name属性
# u'title'

soup.title.string	#title标签的字符串
# u'The Dormouse's story'

soup.title.parent.name	#父节点的名字
# u'head'

soup.p	#p标签
# <p class="title"><b>The Dormouse's story</b></p>

soup.p['class']	#p标签的class属性
# u'title'

找到所有a标签的某个属性值,比如链接的值

for link in soup.find_all('a'):
    print(link.get('href'))

获取所有的文字内容

soup.get_text()

解析器

不同解析器的区别
创建beautifulsoup对象的时候第二个参数指定了使用的解析器类型,如果不指定bs4将会自动指定,指定的顺序是lxml, html5lib, Python标准库,主要看环境中安装了哪个。

解析器之间的区别

python标准库
BeautifulSoup(markup, "html.parser")
lxml解析
BeautifulSoup(markup, "lxml")
lxml-xml解析
BeautifulSoup(markup, ["lxml-xml"])
BeautifulSoup(markup, "xml")

html5lab解析
BeautifulSoup(markup, "html5lib")
最好的容错性

对于这一段html标签
BeautifulSoup("<a><b /></a>")

html结构解析的内容
自动补全b标签
<html><head></head><body><a><b></b></a></body></html>

xml解析的内容
不会补全内容,并且文档添加了xml文件头
<?xml version="1.0" encoding="utf-8"?>
<a><b/></a>

html解析器也有区别,如果文档是标准的html文件那么不会产生区别,如果不标准会产生轻微的差别

lxml解析
自动忽略了错误标签并且补全了不完整的标签
BeautifulSoup("<a></p>", "lxml")
# <html><body><a></a></body></html>

html5lib解析
html5lib自动补全了所有的标签
# <html><head></head><body><a><p></p></a></body></html>

python内置库
不会补全html文档和标签
# <a></a>

编码

标签:lxml,title,标签,beautifulsoup,BeautifulSoup,soup,html
From: https://www.cnblogs.com/niko5960/p/17227678.html

相关文章