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

BeautifulSoup调用text属性时find相关代码无输出是什么原因?

问题原因
  • 你遇到的无输出问题本质是两个点共同导致的:
    1. requests默认请求的User-Agent是python-requests/版本号,这个WordPress搭建的站点会对默认爬虫UA返回差异化内容:你拿到的第一个<p>标签本身是存在的(所以去掉.text打印标签对象能看到HTML结构),但标签内部要么全是HTML注释、要么嵌套的是脚本/空行占位节点,BeautifulSoup的.text属性不会提取注释、脚本内的非展示文本,最终得到空字符串,打印时自然没有可见内容。
    2. 链式调用没有做节点有效性校验:直接写.find().p.text的写法,一旦中间节点不符合预期,不会抛错但会拿到空值,很难快速定位问题。
修复方案

按以下步骤调整代码即可:

  1. 给请求加上浏览器UA,模拟正常用户访问,同时补全编码设置避免文本乱码丢失:
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
page = requests.get(url, headers=headers)
# 自动识别编码,避免默认编码错误导致文本异常
page.encoding = page.apparent_encoding
  1. 不要直接用.p属性取第一个p标签,改为遍历entry-content下所有p标签,过滤掉空内容、注释占位的无效节点,取第一个有实际正文的段落。
    完整可运行代码如下:
from bs4 import BeautifulSoup
import requests

url = 'https://montanahistoriclandscape.com/tag/glasgow-montana/'
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
page = requests.get(url, headers=headers)
page.encoding = page.apparent_encoding

soup = BeautifulSoup(page.text, 'lxml')
article = soup.find('article')
entry_content = article.find('div', class_='entry-content')

first_valid_p = ""
# 遍历所有p标签,跳过空内容节点
for p in entry_content.find_all('p'):
    p_text = p.get_text(strip=True)
    if p_text:
        first_valid_p = p_text
        break

print(first_valid_p)
  • 调试小技巧:如果后续再遇到类似拿到标签但拿不到文本的问题,先直接打印标签对象的完整prettify()输出,看内部是不是全是注释、脚本这类非正文内容,针对性跳过即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:42:31