python爬虫bs4库的用法

server/2024/12/22 12:50:11/

导入

        导入bs4之前先装两个库,bs4和lxml

pip install beautifulsoup4
pip install lxml

        lxml安装后可以显著提高执行速度。

        导入bs4

from bs4 import BeautifulSoup

解析字符串

        BeautifulSoup()方法用于解析字符串,将字符串解析为soup对象,soup对象可以实现识别浏览器标签等功能。

        该方法有两个参数,第一个是要解析的字符串,第二个是要使用的解析器。省略第二个参数后如果安装了lxml则默认为lxml,没安装则html.parser。lxml的速度明显高于html.parser,同时兼容性更佳。

python">soup = BeautifulSoup(html,"lxml")

获取节点

        解析完字符串后就可以获取标签了,可以使用find,findall,select方法。

        也可以直接用点调用标签名,这种用法同find方法。

find方法值返回查找到的第一个属性,有四个参数

        soup.find(tag, attrs=None, recursive=True, string=None, kwargs)

  • tag:标签名,字符串类型。
  • attrs:属性字典,用于进一步筛选标签。
  • recursive:是否递归查找子标签,默认为True。
  • string:字符串或正则表达式,用于查找包含特定文本的标签。

soup.find_all(tag, attrs=None, recursive=True, string=None, limit=None, kwargs)

        多了一个limit参数,可以限制查找的数量。

soup.select()则是用css选择器来选择元素,参数是个字符串,内写css选择器

示例:

python">from bs4 import BeautifulSoup  html_doc = """<html>  
<head>  <title>The Dormouse's story</title>  
</head>  
<body>  <p class="title"><b>The Dormouse's story</b></p>  <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>  <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a>  <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>  
</body>  
</html>"""  
soup = BeautifulSoup(html_doc, 'html.parser')  # 获取标题  
title = soup.title.text  
print(title)  # 获取第一个链接的href属性  
first_link = soup.find('a', class_='sister')  
print(first_link.get('href'))  # 获取所有链接的href属性  
all_links = soup.find_all('a', class_='sister')  
for link in all_links:  print(link.get('href'))soup.select('body>p')
soup.select('a[href*="example.com"]')# 查找href属性中包含"example.com"的a标签

获取节点属性

        每个通过Beautiful Soup解析得到的标签都是一个Tag对象,它拥有一些属性和方法,可以用来获取标签的详细信息或进行进一步的操作。

  • .name:获取标签的名称。
  • .attrs:获取标签的所有属性,以字典形式返回。
  • .string ,.text 或 .get_text():获取标签内的文本内容。
  • .parent:获取当前标签的父标签。
  • .next_sibling 和 .previous_sibling:获取当前标签的下一个和上一个兄弟标签。

较为常用的是.text和.attrs,示例:

python">print(soup.p.text)
print(soup.p.attrs) # class的value是列表,name的value是字符串 对应属性的性质,一个标签可以有多个类而不能有多个name
print(soup.p.attrs.get("class"))    #字典有两种取值方式 这种方式不会报错,下一行方式若没有对应的属性名会报错
print(soup.p.attrs["class"])

温馨提示

        request库中的reponse对象的text属性就是一个字符串


http://www.ppmy.cn/server/122261.html

相关文章

R包:ggspatial空间画图

ggplot2语法的空间图形画图 Spatial data plus the power of the ggplot2 framework means easier mapping. 加载R包 # install.packages("ggspatial")library(ggplot2) library(ggspatial) load_longlake_data()Using layer_spatial() and annotation_spatial() g…

Qt 每日面试题 -4

31、继承与派生的区别? 角度不同 继承是从子类的角度讲的&#xff0c;派生是从基类的角度讲的。 定义不同 派生指江河的源头产生出支流。引申为从一个主要事物的发展中分化出来。继承是面向对象软件技术当中的一个概念&#xff0c;与多态、抽象共为面向对象的三个基本特征。继…

Supervision 计算机视觉工具

Supervision 是一个强大的计算机视觉工具库&#xff0c;它提供了丰富的功能来处理各种视觉任务&#xff0c;如目标检测、语义分割、目标跟踪等。这个库的最大特点是它能够简化代码的编写&#xff0c;使得视觉任务的处理变得更加高效和直观。 安装 Supervision 库可以在 Pytho…

运维工程师面试整理-沟通能力

在运维工程师的面试中,沟通能力是一个关键的软技能。虽然运维工程师的工作主要集中在技术领域,但良好的沟通能力能够帮助你更有效地与团队成员、其他技术部门和非技术人员协作。以下是关于运维工程师需要具备的沟通能力的详细内容,帮助你更好地准备面试。 1. 沟通能力的重要…

数学建模-线性规划讲解(Matlab版本)

引言 相信不少小伙伴刚开始接触数学建模时&#xff0c;第一个学习的算法就是运筹学的重要分支--数学规划&#xff0c;而数学规划当中重要的分支就是线性规划了。在这里笔者参考了司守奎和孙玺菁老师的《数学建模算法与应用》(第三版&#xff09;这本书&#xff0c;以此来讲讲关…

【python笔记】列表操作append(list)与append(list[:])的区别;列表的就地修改与非就地修改

问题背景&#xff1a; 当有一个数组list1 [1,2,3]&#xff0c;需要根据list1创建一个二维数组list2时&#xff0c; 想到了列表的list2.append(list1) 结果由于list1.pop()更改&#xff0c;list2的结果也随之变化&#xff0c;开始摸不着头脑。 append(list)与append(list[:])的…

前端文件下载全流程

一、首先是点击下载函数功能 源代码&#xff1a; java const dow async (record: any) > {console.log(record,record);let date: any {}date.pcno record.pcnodate.fileName record.fileNamedate.gmtCreated dayjs(record.gmtCreated).format(YYYY-MM)date.importSta…

解决docker目录内存不足扩容处理

当我们使用docker时&#xff0c;经常会创建新镜像和新容器&#xff0c;在新容器中又会安装各种包&#xff0c;这些东西不是虚拟的&#xff0c;而是实实在在存于我们的磁盘中&#xff0c;默认在/var/lib/docker中&#xff0c;这个目录是属于系统盘的&#xff0c;而系统盘的空间往…