Python bs4中解析html文档的方法

目录

获得bs文档对象

获取html标签,标签内容及属性

文档遍历

正则搜索

传入函数方法搜索

参数匹配搜索

text文本搜索

css选择器搜索


获得bs文档对象

# BeautifulSoup用来解析html等文本格式
# 引入bs4
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")

获取html标签,标签内容及属性

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)

文档遍历

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)

正则搜索

# re用来写正则表达式的规则
import re
# 搜索出所有包含a的标签
compile()   #里面传入的是正则表达式的规则
c_list = bs.find_all(re.compile("a"))
print(c_list)

传入函数方法搜索

# 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)

参数匹配搜索

# 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)

text文本搜索

# 将所有匹配的文本搜索出来
t_list = bs.find_all(text="贴")
print(t_list)
# 可以传多个text参数
t_list = bs.find_all(text=["hao123", "新闻", "贴吧"])
print(t_list)

css选择器搜索

# 将所有的<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)
# 还有其他选择器,比如兄弟选择器等等也可以查找

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值