python之Bs4的使用

Bs4是一个可以帮助我们快速解析文档,获取我想要的标签和内容的第三方库

# BeautifulSoup用来解析html等文本格式
# 引入bs4和re
import re
from bs4 import BeautifulSoup

f = open("baidu.html", "rb")
html = f.read().decode("utf-8")
# html.parser指定一个解析器,代表解析html文档吗,因为BeautifulSoup不仅仅可以解析html,其他的一些文档格式也可以解析
bs = BeautifulSoup(html, "html.parser")
  1. 获取标签,标签的内容及属性
print(bs.title)  # 获取网页<title></title>
print(bs.a)  # 获取网页<a></a>
print(bs.head)  # 获取网页<head></head>

# 获取标签里面的内容
print(bs.title.string)
print(bs.a.string)

# 获取标签的所有属性
print(bs.a.attrs)
  1. 文档遍历
print(bs.head.contents)
for i in range(len(bs.head.contents)):
    item=bs.head.contents[i]
    print(item.string)

# 1. 文档的搜索 find_all
# 字符串过滤,将文档所有的a标签搜索出来,但是只能搜索<a></a>标签,<adc></adc>标签就不可以
tagList = bs.find_all("a")
print(tagList)
# 将a标签的前三条搜索出来 用limit=3
tagList = bs.find_all("a", limit=3)
print(tagList)
  1. 正则表达式搜索
# re用来写正则表达式的规则
import re
# 搜索出所有包含a的标签
compile()   #里面传入的是正则表达式的规则
c_list = bs.find_all(re.compile("a"))
print(c_list)
  1. 方法搜索,可以传入一个函数
# has_attr方法代表:如果对象有该属性返回 True,否则返回 False。
def name_is_has(tag):
    return tag.has_attr("name")
# 将所有包含name属性的标签查询出来
h_list = bs.find_all(name_is_has)
print(h_list)
  1. 参数匹配搜索
# id=head的标签搜索出来
i_list = bs.find_all(id="head")
# 因为class是关键之 所有这里使用class_  ,所有有class属性的标签搜索出来
i_list=bs.find_all(class_=True)
# 将所有标签带有 href="http://www.baidu.com/more/" 属性的搜索出来
i_list=bs.find_all(href="http://www.baidu.com/more/")
for item in i_list:
    print(item)
  1. text参数搜索
# 将所有匹配的文本搜索出来
t_list = bs.find_all(text="贴")
print(t_list)
# 可以传多个text参数
t_list = bs.find_all(text=["hao123", "新闻", "贴吧"])
print(t_list)
  1. css 选择器查找 select
# 将所有的<title></title>查找出来
c_list=bs.select('title')
# 将所有的class=s-top-more  查找出来
c_list=bs.select(".s-top-more")
# 将所有的id=u1的标签查找出来
c_list = bs.select("#u1")
# 将所有div包含class='guide-info' 属性的标签查找出来
c_list=bs.select("div[class='guide-info']")
# 通过子标签来查找
c_list=bs.select("head>title")
# 获取该标签的文本
msg=c_list[0].get_text()
print(msg)
print(c_list)
# 还有其他选择器,比如兄弟选择器等等也可以查找
posted @ 2021-07-06 11:23  我的网名  阅读(135)  评论(0)    收藏  举报