首页 > 作文

BeautifulSoup使用

更新时间:2023-04-07 12:42:26 阅读: 评论:0

一实例html

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>

str与BeautifulSoup互相转换

2.1安装bs4:

pip install bs4

2.2使用bs4的BeautifulSoup

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

三、四大对象

3.1 Tag对象(两个重要属性:name和attrs)

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

3.2NavigableString文本对象

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

3.3 BeautifulSoup对象

print(type(bs)欢乐颂插曲) #<class ‘bs4.BeautifulSoup’>

可以把BeautifulSoup对象看成一个Tag对象

3.4 Comment注释对象

# 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

只得到文本内容

、两类节点

4.1子节点contents和children

contents = bs.div.contents

print(contents) #返回一个列表,以行为单位划分

children = bs.div.children

print(children) #返回一个list生成器对象

for obj in children:

print(obj)

命令

解释

.contents

返回一个以行为划分方式的列表

.children

返回一个list生成器对象

4.2子孙节点descendants

descendants = bs.div.descendants

print(descendants) #<generator object descendants at…>生成器对象
forobj in decendants:

print(obj)

命令

解释

descendants

返回一个生成器对象

五、搜索方式

5.1 find和find_all

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)

5.2 lect和lect_all(css选择器)

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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图