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

使用BeautifulSoup抓取包含<a>标签的<p>段落内容的问题

问题解决方法

问题原因

你的代码依赖link.string获取段落文本,但当<p>标签包含<a>这类子标签时,link.string会返回None(因为标签存在多个子节点,无法用单个NavigableString表示),导致判断条件不成立,带超链接的段落被过滤。

解决方案

用get_text()方法替代link.string,该方法能提取标签及其所有子标签内的全部文本内容,同时调整判断逻辑,基于提取后的文本长度筛选有效内容。

修改后的代码

!pip3 install requests pandas
from bs4 import BeautifulSoup as BS
import requests as req
import pandas as pd

url = "https://www.geo.tv/latest/456848-ronaldo-eyes-world-cup-quarters-as-morocco-dare-to-dream"
webpage = req.get(url)
trav = BS(webpage.content, "html.parser")
attributes_container = []

for p_tag in trav.find_all('p'):
    # 获取当前p标签下的所有文本(包含子标签内容),同时去除首尾空白
    paragraph_text = p_tag.get_text(strip=True)
    # 筛选长度超过35的有效段落
    if len(paragraph_text) > 35:
        print(paragraph_text)
        attributes_container.append(paragraph_text)
        
text_df = pd.DataFrame(attributes_container, columns=["Text"])
text_df

关键改动说明

  • 替换文本提取方式:p_tag.get_text(strip=True)能完整提取标签内所有文本(包括子标签里的内容),strip=True还能清理文本前后的空白字符。
  • 简化判断逻辑:移除对link.string类型的校验,直接基于提取后的文本长度筛选,避免因标签结构导致内容遗漏。
  • 补全依赖导入:原代码使用pd.DataFrame但未导入pandas,这里补上避免运行报错。

内容的提问来源于stack exchange,提问作者M Haider Bin Amir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:50:15