python爬虫bs4库的用法

devtools/2024/9/29 15:45:36/

导入

        导入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/devtools/118753.html

相关文章

进阶数据库系列(十三):PostgreSQL 分区分表

概述 在组件开发迭代的过程中&#xff0c;随着使用时间的增加&#xff0c;数据库中的数据量也不断增加&#xff0c;因此数据库查询越来越慢。 通常加速数据库的方法很多&#xff0c;如添加特定的索引&#xff0c;将日志目录换到单独的磁盘分区&#xff0c;调整数据库引擎的参…

c语言200例 066

大家好&#xff0c;欢迎来到无限大的频道 今天给大家带来的是c语言200例。 要求&#xff1a; 根据输入的职业表示&#xff0c;区分是老师还是学生&#xff0c;然后根据输入的信息&#xff0c;将对应的信息输出&#xff0c;如果是学生&#xff0c;则输出班级&#xff0c;如果是…

SpringCloud-07 GateWay01 网关技术

Spring Cloud Gateway组件的核心是一系列的过滤器&#xff0c;通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。 Spring Cloud Gateway是加在整个微服务最前沿的防火墙和代理器&#xff0c;隐藏微服务结点IP端口信息&#xff0c;从而加强安全保护。Spring Clou…

open-resty 服务安装jwt插件

作者&#xff1a;程序那点事儿 日期&#xff1a;2023/11/16 22:07 lua-resty-jwt 插件 如果想使用Lua识别用户令牌&#xff0c;我们需要引入lua-resty-jwt模块&#xff0c;是用于 ngx_lua 和 LuaJIT 的 Lua 实现库&#xff0c;在该模块能实现Jwt令牌生成、Jwt令牌校验。 下载…

前端大模型入门:使用Transformers.js手搓纯网页版RAG(二)- qwen1.5-0.5B - 纯前端不调接口

书接上文&#xff0c;本文完了RAG的后半部分&#xff0c;在浏览器运行qwen1.5-0.5B实现了增强搜索全流程。但受限于浏览器和模型性能&#xff0c;仅适合于研究、离线和高隐私场景&#xff0c;但对前端小伙伴来说大模型也不是那么遥不可及了&#xff0c;附带全部代码&#xff0c…

Cesium笔记 canvas定制billboard

Cesium 中label时&#xff0c;想要设置text的背景图片时&#xff0c;label没有backgroundimage属性。 如果使用labelbillboard 的方式设置&#xff0c;会存在文本长短不一时&#xff0c;图片不能自适应等问题。 const showLabelFun (dataMcInfo, backgroundcolor) > {var…

基于Next.js和TailwindCss的TailwindCss

最近在研究 Next.js 和 TailwindCss &#xff0c;这两天没事的时候就搞了一个 c。 目前工具部署在 Vercel &#xff0c;欢迎各位体验&#xff08;能提出意见更好嘿嘿&#xff09; 体验地址&#xff1a; https://icon.999872.xyz/ 图片预览 &#x1f447;

IOS-IPA签名工具 request_post 任意文件读取复现

0x01 产品描述&#xff1a; 苹果手机中的IPA是指iOS应用程序&#xff08;iPhone应用程序&#xff09;的安装包文件&#xff0c;其文件扩展名为.ipa。IPA文件是经过编译的、已签名的应用程序文件&#xff0c;可以在iOS设备上安装和运行。通常&#xff0c;开发者通过Xcode等开发工…