简介
Beautiful Soup 简称 BS4(其中 4 表示版本号)是一个 Python 第三方库,它可以从 HTML 或 XML 文档中快速地提取指定的数据。Beautiful Soup 语法简单,使用方便,并且容易理解,因此您可以快速地学习并掌握它。
导入解析包
from bs4 import BreautifulSoup
# 创建解析对象
soup = BreautifulSoup(html,'lxml')
而 html.parser 表示解析文档时所用的解析器,此处的解析器也可以是 ‘lxml’ 或者 ‘html5lib’
prettify()
方法用于格式化输出html/xml文档,便于查看网页逻辑
import requests
from bs4 import BeautifulSoup
url = 'https://www.baidu.com/'
resp = requests.get(url)
resp.encoding='utf-8'
soup = BeautifulSoup(resp.text,'lxml')
print(soup.prettify())
如果是外部文档,您也可以通过 open() 的方式打开读取,语法格式如下:
soup = BeautifulSoup(open('baidu.html', encoding='utf8'), 'lxml')
方法 | 说明 |
---|---|
soup.p | 直接获取节点 |
contents | 获取所有的子节点(列表) |
attrs | 获取属性值(字典) |
text | 获取文本内容 |
string | 获取文本内容 |
get_text() | 获取文本内容 |
from bs4 import BeautifulSoup
html_1 ='''
<div id="u1">
<a class="mnav" href="http://news.baidu.com" name="tj_trnews">
新闻
</a>
<a class="mnav" href="https://www.hao123.com" name="tj_trhao123">
hao123
</a>
<a class="mnav" href="http://map.baidu.com" name="tj_trmap">
地图
</a>
<a class="mnav" href="http://v.baidu.com" name="tj_trvideo">
视频
</a>
<a class="mnav" href="http://tieba.baidu.com" name="tj_trtieba">
贴吧
</a>
<noscript>
<a class="lb" href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1" name="tj_login">
登录
</a>
</div>
'''
soup = BeautifulSoup(html_1,'lxml')
# print(soup.prettify())
# 获取整个div标签
print(soup.div)
# 获取第一个a标签
print(soup.div.a)
# 获取第一a标签内容
print(soup.div.a.text)
# 查看标签的属性,字典的形式
print(soup.div.a.attrs)
# 查看返回的数据类型
print(type(soup.div))
# 根据属性,获取标签的属性值,返回值为列表
print(soup.div.a['class'])
# 给class赋值
soup.div.a['class']=['web','Site']
print(soup.div.a)
方法选择器
方法选择器 | 说明 |
---|---|
find_all | 获取所有 |
find() | 获取第一个 |
import re
from bs4 import BeautifulSoup
html_1 ='''
<div id="u1">
<a class="mnav" href="http://news.baidu.com" name="tj_trnews">
新闻
</a>
<a class="mnav" href="https://www.hao123.com" name="tj_trhao123">
123
</a>
<a class="mnav" href="http://map.baidu.com" name="tj_trmap">
地图
</a>
<a class="mnav" href="http://v.baidu.com" name="tj_trvideo">
视频
</a>
<a class="mnav" href="http://tieba.baidu.com" name="tj_trtieba">
贴吧
</a>
<noscript>
<a class="lb" href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1" name="tj_login">
登录
</a>
</div>
'''
soup = BeautifulSoup(html_1,'lxml')
# 查找第一个标签
print(soup.find('a'))
# 查找多个标签
print(soup.find('a','input'))
# 通过属性名进行查找
print(soup.find_all(class_='mnav'))
print(soup.find_all(attrs={'class':'mnav'}))
print(soup.find_all('a',class_='mnav'))
# 通过文本内容进行查找
print(soup.find_all(text='视频'))
# 通过匹配内容获取内容
print(soup.find_all(text=re.compile('\d+')))
css选择器
方法 | 说明 |
---|---|
select(‘q’) | 节点选择 |
select(‘.类名’) | 类选择器 |
select(‘#id名’) | id选择器 |
select(‘p[属性名=’‘属性值]’) | 属性选择器 |
select(‘div a’) | 层级选择器(后代选择器) |
select(div > p ) | 层级选择器(子代选择器) |
select(‘div,p’) | 层级选择器(同时选择器) |
import re
from bs4 import BeautifulSoup
html_1 ='''
<div id="u1">
<a class="mnav" href="http://news.baidu.com" name="tj_trnews">
新闻
</a>
<a class="mnav" href="https://www.hao123.com" name="tj_trhao123">
123
</a>
<a class="mnav" href="http://map.baidu.com" name="tj_trmap">
地图
</a>
<a class="mnav" href="http://v.baidu.com" name="tj_trvideo">
视频
</a>
<a class="mnav" href="http://tieba.baidu.com" name="tj_trtieba">
贴吧
</a>
<noscript>
<a class="lb" href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1" name="tj_login">
登录
</a>
</div>
'''
soup = BeautifulSoup(html_1,'lxml')
# 获取所有的a标签
print(soup.select('a'))
# 类选择器,获取类名为 mnav的标签
print(soup.select('.mnav'))
# id 选择器 ,获取类名为'ul'的所有的标签
print(soup.select('#ul'))
# 属性选择器 获取所有name 属性为tj_trhao123
print(soup.select('p[name=tj_trhao123]'))
# 层级选择器 (后代选择器)
print(soup.select('div a'))
# 层级选择器(子代选择器)
print(soup.select('div>a'))
# 层级选择器(同时选择)
print(soup.select('div,a'))
本人的理解:如有不正确或者不恰当的地方欢迎各位大佬进行子代选择器:只选择自己的亲儿子不是亲儿子不选
后代选择器:不管是不是儿子只要是他的后代就都搂上
同时选择两个标签都要文章来源:https://www.toymoban.com/news/detail-470642.html
个人笔记仅供参考文章来源地址https://www.toymoban.com/news/detail-470642.html
到了这里,关于python的bs4模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!