BeautifulSoup学习

1.BeautifulSoup是强大的库,它包含在一个名称为bs4的文件包中,需要另外安装,安装很简单,在命令行窗体中进入python的安装目录,在进入Scripts子目录.找到pip程序,执行:
pip install bs4
安装成功后在python的命令窗口中执行语句:
from bs4 import BeautifulSoup
没报错安装成功.
在这里插入图片描述
在这里插入图片描述
HTML缺失根元素是BeautifulSoup会自动补上,他发现元素没有元素后自动增加用元素包含<title>元素;他发现没有元素也自动补上.

2.BeautifuSoup查找文档元素.
查找元素是我们爬取网页信息的重要手段,BeautifulSoup提供了一系列的查找元素的方法,其中功能强大的find_all函数就是其中常用的一个方法.

find_all函数的原型如下:
**find_all(self,name=None,attrs={},recursive=True,text=None,limit=None,kwargs)
self 表明它是一个类成员函数;
name 是要查找tag元素名称,默认值None,如果不提供,就是查找所有元素.
attrs是元素的属性,它是一个字典,默认是空.如果提供就是查找有这个指定属性的元素.
recursive指定查找是否在元素节点的子树下面全范围进行,默认True;

find_all函数返回查找到的所有指定的元素的列表,每个元素是一个bs4.element.Tag对象.

如果我们只查找一个元素节点,那么可以使用find函数,它的原型如下:
**find(self,name=None,attrs={},recursive=True,text=None,limit=None,kwargs)
他与find_all类似,不同的是它只返回第一个满足要求的节点,不是一个列表.

3.BeautifulSoup获取元素属性值
如果一个元素已经找到,例如找到元素,那怎么获取它的属性值呢?BeautifulSoup使用tag[attrName]
来获取tag元素的名称为attrName的属性值,其中tag是一个bs4.element.Tag对象.
在这里插入图片描述
4.BeautifulSoup获取元素包含的文本值
找到一个元素,例如找到元素,那么怎么获取包含文本的文本值呢?
BeautifulSoup使用:tag.text来获取tag元素包含的文本值,其中tag是一个bs4.element.Tag对象.

以下面这个html为例子.

import lxml
from bs4 import BeautifulSoup
doc = '''
<html>
<head><title>my sister is a Beautiful girl</title></head>
<body>
<p class='title'><b>The is my pen</b></p>
<p class='story'>The is my friends;and their names were
<a href="http://example.com/elsie" class="sister" id='link1'>Elsie</a>
<a href="http://example.com/lacie" class="sister" id='link2'>lacie</a>and
<a href="http://example.com/title" class="sister" id='link3'>title</a>
and live happy 
</p>
<p class="story">...</p>
</body>

</html>
'''
soup=BeautifulSoup(doc,"lxml")
tags=soup.find_all(name=None,attrs={"class":"story"})
for tag in tags:
    print(tag)

在这里插入图片描述
查看文本

soup=BeautifulSoup(doc,"lxml")
tags=soup.find("p",attrs={"class":"story"})
print(tags.text)

在这里插入图片描述
查看html的文本
在这里插入图片描述
5.BeautifulSoup高级查找.
不是find和find_all都能满足我们需要,那么我们可以设计一个查找函数.
tag参数,实际上就是每个元素.
在这里插入图片描述
程序我们定义一个筛选函数myFilter(tag),它的参数是tag对象,在调用soup.find.all(myFilter)是程序会把每个tag元素传递给myFilter函数,由该函数觉得这个tag的取舍,如果函数返回True就保留这个tag到结果集中,不然就丢掉这个tag.
tag.name是tag名的称
tag.hash_attr(attName)判断tag是否有attName属性;
tag[attName]是tag的attName属性值;

6.BeautifulSoup查找变量相关元素(邻近节点 上节点 …)

获取元素节点的父节点
BeautifulSoup通过
tag.parent
正个文档的父节点,直到找不到为止.
在这里插入图片描述
获取元素节点的直接子元素节点
BeautifulSoup通过
tag.children
在这里插入图片描述

获取所有元素节点的所有子孙元素节点
BeautifulSoup通过
tag.desendants
获取tag节点的所有子孙节点元素,包括element、text等类型的节点.
在这里插入图片描述
获取元素的兄弟节点
tag.next_sibling
tag.previous_sibling
来获取下一个和前一个兄弟节点,其中tag.next_sibling是tag的临近的下一个兄弟节点,tag.previous_sibling是tag临近前一个兄弟节点.

import lxml
from bs4 import BeautifulSoup
doc = '''
<html>
<head><title>my sister is a Beautiful girl</title>
</head>
<body>
<p class='title'><b>The<i> is my pen</i></b> once upon a time...
</p>
<p class='story'>The is my friends;and their names were
<a href="http://example.com/elsie" class="sister" id='link1'>Elsie</a>
<a href="http://example.com/lacie" class="sister" id='link2'>lacie</a>and
<a href="http://example.com/title" class="sister" id='link3'>title</a>
and live happy 
</p>
<p class="story">...</p>
</body>

</html>
'''

soup=BeautifulSoup(doc,"lxml")
tag=soup.find("b")
print(tag.previous_sibling)
print(tag.next_sibling)

tag=soup.find("i")
print(tag.previous_sibling)
print(tag.next_sibling)



在这里插入图片描述
我们来查看父节点的名称
在这里插入图片描述
查看子节点的名称
在这里插入图片描述
在这里插入图片描述
BeautifulSoup支持find和find_all自己函数,也支持css语法查询.

7.BeautifulSoup处理可以用find与find_all函数查找HTML文档树的节点元素外,还可以采用css类似语法查询,规则是:

tag.select(css)
其中tag是一个bs4.element.Tag对象,即HTML中的一个element节点元素,select是它查找方法,css是类似css语法的一个字符串,一般结构如下:
[tagName][attName[=value]]
其中[…]部分是可选的;
tagName是元素名称,如果没指定就是所有元素;
attName=value是属性名称,value是它对应的值,可以不指定属性,在指定了属性后也可以不指定值;
tag.select(css)返回一个bs4.element.Tag的列表,哪怕只有一个元素也返回一个列表.

soup.select(“a”)查找文档中所有元素节点;
soup.select(“p a”)查找文档所有

节点下所有的元素节点;
soup.select(“a[id=‘link1’]”)查找属性id='link1’的节点

在这里插入图片描述select查找兄弟节点
soup.select(“div ~p”)查找到同级别的p节点

from bs4 import BeautifulSoup
doc='''
<body>
demo
<div>A</div>
<p>X</p>
<p>B</p>
<span><p>C</p></span>
</body>'''
soup=BeautifulSoup(doc,"lxml")
print(soup.prettify())
tags=soup.select("div ~ p")
print(len(tags))
for tag in tags:
    print(tag)
print()

tags=soup.select("div+p")
for tag in tags:
    print(tag)

运行代码
在这里插入图片描述

BeautifulSoup是一个Python库,用于从HTML或XML文件中提取数据。它提供了一种简单而灵活的方式来解析和遍历标记文档,并提供了许多有用的方法和属性来获取所需的信息。 在BeautifulSoup库的学习笔记中,介绍了BeautifulSoup库的简介和安装方法。它可以通过pip进行安装,并且有多种解析器可供选择。BeautifulSoup类有五种基本元素,包括Tag标签、Name名字、Attributes属性、NavigableString非属性字符串和Comment注释。它们可以用于遍历标签树的下行、上行和平行遍历。此外,BeautifulSoup几乎覆盖了HTML和XML中的所有内容,还包括一些特殊对象,例如文档的注释部分。 需要注意的是,BeautifulSoup对象本身不是真正的HTML或XML的tag,因此它没有name和attribute属性。但是,在某些情况下,查看它的.name属性是很方便的,因此BeautifulSoup对象包含了一个特殊属性.name,其值为"[document]"。另外,还有一些特殊对象,例如注释对象,可以通过使用BeautifulSoup库来处理。 综上所述,BeautifulSoup库提供了强大的解析和提取HTML或XML中数据的功能,适用于各种爬虫和数据提取任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [BeautifulSoup学习笔记一](https://blog.csdn.net/weixin_43978546/article/details/104858873)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [BeautifulSoup 学习笔记](https://blog.csdn.net/zhengjian0617/article/details/81142540)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值