You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Beautiful Soup爬虫中使用attrs的原因及attrs与tag的区别是什么

Beautiful Soup中tag匹配与attrs参数的区别

首先明确二者的核心作用差异:

  • tag匹配是find_all()方法的第一个位置参数,仅用来匹配HTML/XML节点的标签名称,比如传入'a'只会筛选所有<a>标签,传入'div'只会筛选所有<div>标签,不会对标签的属性、文本内容做任何筛选。
  • attrs是find_all()方法的可选关键字参数,专门用来匹配HTML/XML节点的属性键值对,不限制标签类型,只要节点的属性符合你传入的规则就会被选中,你可以同时传入多个属性规则做复合筛选。

结合你遇到的场景做解释:
你现在可以用attrs={'class': 'title'}匹配到目标,但直接用tag匹配不到,是因为你要找的目标节点本身的标签名不是title,只是它的class属性值为title,比如目标节点结构大概率是<div class="title">、<p class="title">这类。如果你直接写soup.find_all('title'),只会匹配到HTML头部用来定义网页标题的原生<title>标签,这个节点下没有你要的<a>子标签,自然抓不到内容。

可以参考下面的示例HTML结构理解:

<!-- 你要匹配的目标节点 -->
<div class="title">
  <a href="https://example.com">目标链接</a>
</div>

<!-- tag匹配'title'时只会命中这个节点 -->
<title>当前网页标题</title>

执行soup.find_all('title')只能拿到上面的<title>节点,没有子级<a>标签
执行soup.find_all(attrs={'class': 'title'})可以拿到<div class="title">节点,内层循环可以正常提取子级<a>标签

内容的提问来源于stack exchange,提问作者hass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:54:06