bs4.html
<!DOCTYPE html>
<html lang=”en”>
<head>
<meta chart=”UTF-8″>
<title>bs4_text</title>
</head>
<body>
<div id = “id1” name = “div1” class = “div_class1”>
<!– div1的注释–>
<h1><!– h1注释–></h1>
<h2><!– h2注释–>h2的内容</h2>
<a class = “a_class1” href = “http://www.baidu.com”>
baidu
</a>
<a class = “a_class1” href = “http://www.taobao.com”>taobao</a>
<span>
<span>span_text</span>
</span>
</div>
<div id = “id2” name = ‘div2’ class = “div_class2”>
<a class = “a_class2” href = “http://www.jd.com”></a>
<a class = “a_class2” href = “http://www.vip.com”>vip</a>
</div>
司仪主持</body>
</html>
pip install bs4
from bs4 import BeautifulSoup
# 1.加载html
with open(“bs4.html”,”r”,encoding=”utf-8”) as f:
html = f.read()
# 2.str转BeautifulSoup对象
bs= BeautifulSoup(html)
# 3.BeautifulSoup对象转str
html_str1 = str(bs)
html_str2 = bs.prettify()
div_tag = bs.div #根据标签名字取对象,只会拿到匹配到的第一个对象
print(div_tag)
print(type(div_tag)) #<class ‘bs4.element.Tag’>
# 1. name属性
print(div_tag.name) # div
# 2.attrs属性
print(div_tag.attrs) #{‘id’: ‘id1’, ‘name’: ‘div1’, ‘class’: [‘div_class1’]}
# 3.取属性值
print(div_tag[‘id’]) #id1
# 4.组合
print(div_tag.a[‘class’]) #[‘a_class1’]
命令
解释
BeautifulSoup.标签名
得到匹配到的第一个tag对象
Tag.name
得到这个tag的标签名
Tag.attrs
字典的形式返回属性键值对
Tag[‘key’]
得到这个Tag对象key属性对应的value
string= bs.div.a.string
print(string) # baidu(不会删除多余的空格)
print(type(string)) #<class ‘bs4.element.NavigableString’>
text = bs.div.a.get_text()
print(text) # baidu(不会删除多余的空格)
print(type(text)) #<class ‘str’>
命令
解释
Tag.string
返回html中的元素,类型是NavigableString
Tag.get_text()
返回html中的元素,类型是str
print(type(bs)欢乐颂插曲) #<class ‘bs4.BeautifulSoup’>
可以把BeautifulSoup对象看成一个Tag对象
# string
obj1 = bs.div.h1.string
obj2 = bs.div.h2.string
print(obj1) # h1注释
print(type(obj1)) #<class ‘bs4.element.Comment’>
print(obj2) #None
print(type(obj2)) #<class ‘NoneType’>
# get_text()
obj3 = bs.div.h2.get_text()
print(obj3) #h2的内容
print(type(obj3)) #<class ‘str’>
.string
.get_text()
元素只有注释
得到注释内容(去掉注释符号)对象类型:Comment
得到注释内容(去掉注释符号)对象类型:str
元素只有文本
NavigableString对象的文本
str对象的文本
元素既有注释又有文本
None
只得到文本内容
contents = bs.div.contents
print(contents) #返回一个列表,以行为单位划分
children = bs.div.children
print(children) #返回一个list生成器对象
for obj in children:
print(obj)
命令
解释
.contents
返回一个以行为划分方式的列表
.children
返回一个list生成器对象
descendants = bs.div.descendants
print(descendants) #<generator object descendants at…>生成器对象
forobj in decendants:
print(obj)
命令
解释
descendants
返回一个生成器对象
find返回匹配成功的第一个对象,find_all返回所有
5.1.1构造方法:
deffind(lf,name=None,attrs={},recursive=True,text=None,
**kwargs):
def find_all(lf, name=None, attrs={}, recursive=True, text=None,
limit=None, **kwargs):
参数
解释
name
标签值
attrs
属性值
recursive
是否递归遍历所有子孙节点
text
文本
limit
结果的数量
**kwargs
属性值
5.1.2 name——str和list:
ret1 = bs.find_all(name=”div”) #标签名是div
print(ret1)
ret2 = bs.find_all(name=[“a”,”span”]) #标签名是a或span
print(ret2)
5.1.3 name——正则 :
import re
pattern = re.compile(‘.*?iv’)
ret3 = bs.find(name=pattern)
print(ret3)
5.1.4 attrs和**kwagrs:
ret4 = bs.find_all(attrs = {“class”:”a_class1”})
print(ret4)
#理论上相当于
ret5 = bs.find(class =“a_class1”) #但因为class是关键字,不能这么写
#如果是id,就可以:
ret6 = bs.find(id =“….”)
5.1.5 text
taobao = bs.find_all(text=’taobao’)
print(taobao)#[‘taobao’]
baidu = bs.find_all(text=’baidu’)
print(baidu)#[]
pattern = re.compile(‘\n*?.*?baidu\n*?.*?’)
baidu = bs.find_all(text=pattern)#[‘\n baidu\n ‘]
print(baidu)
lect_one返回满足的第一个,lect返回所有
5.2.1构造方法:
def lect_one(lf, lector, namespaces=None, **kwargs):
def lect(lf, lector, namespaces=None, limit=None, **kwargs):
5.2.2根据标签查找
div = bs.lect(“div”)
print(div)
print(len(div))
print(div[0].prettify()) #转str
print(div[0].get_text()) # div中的所有text
5.2.3根据类名查找
class1 = bs.lect(“.a_class1”)
5.2.4根据id查找
id1 = bs.lect(‘#id1’)
5.2.5组合查找
print(‘di双赢思维v > .a_class1’)
print(‘.div_class1 > .a_class1’)
print(‘div > a’)
print(‘#id1 > span’)
注:
>可以省略,只写空格组合查找并不是并列关系,而是递进5.2.6属性查找
print(bs.lect(‘a[class=”a_class1”]’))
print(bs.lect(‘div > a[class=”a_class1”]’))
本文地址:htt弘扬宪法精神ps://blog.csdn.net/kzl_knight/article/details/107500861
本文发布于:2023-04-07 12:42:24,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/dd7e07da8186d622a27efbbaff40c7d9.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:BeautifulSoup使用.doc
本文 PDF 下载地址:BeautifulSoup使用.pdf
留言与评论(共有 0 条评论) |