当前位置: 首页 > article >正文

python爬虫bs4库的用法

导入

        导入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,同时兼容性更佳。

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选择器

示例:

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,示例:

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.kler.cn/a/326723.html

相关文章:

  • C++软件设计模式之装饰器模式
  • 阿里云人工智能ACA(五)——深度学习基础
  • Java爬虫实战:深度解析VIP商品详情获取技术
  • WhisperKit: Android 端测试 Whisper -- Android手机(Qualcomm GPU)部署音频大模型
  • 定时任务——定时任务技术选型
  • 【QT开发自制小工具】PDF/图片转excel---调用百度OCR API接口
  • 【电机-概述及分类】
  • 【SQL】笛卡尔积比较收入更高的员工
  • 如何用Python监控本股市的方法
  • 【中关村在线-注册/登录安全分析报告】
  • 基于单片机的多点温度测量系统
  • 在Ubuntu下通过Docker部署NAS服务器
  • 遇到慢SQL、SQL报错,应如何快速定位问题 | OceanBase优化实践
  • Flet介绍:平替PyQt的好用跨平台Python UI框架
  • sheng的学习笔记-logback
  • 实验OSPF路由协议(课内实验)
  • 运输层和应用层之间的接口和端口有什么关系
  • Android常用C++特性之std::optional
  • 7. 无线网络安全
  • Docker全家桶:Docker Compose项目部署
  • CICD Jenkins实现Pipline
  • sqli-labs时间盲注、布尔盲注脚本
  • 数据结构之链表(2),双向链表
  • 面试系列-携程暑期实习一面
  • C++ | Leetcode C++题解之第438题找到字符串中所有字母异位词
  • Python Web 应用中的 API 网关集成与优化