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

网页爬取中提取文章段落问题:循环<p>标签失败求助

问题分析与解决方案

你的代码目前仅提取了每篇文章中id为absatz1的单个<p>标签,既没有遍历所有段落,还可能因部分文章不存在该id标签,导致生成的内容列表出现空值,或与你预期的“每篇文章对应多段内容”结构不符,最终出现链接列表与段落列表长度不一致的问题。

修正后的代码

import requests
from bs4 import BeautifulSoup
import re

diepresse_url='https://www.diepresse.com/'
html = requests.get(diepresse_url)
bsobj = BeautifulSoup(html.content, 'lxml')
links = []

# 抓取文章链接并去重
for link in bsobj.find_all('a', attrs={'href': re.compile("^https://www.diepresse.com/6")}):
    href = link.get('href')
    if href not in links:
        links.append(href)

# 存储每篇文章的完整内容
article_contents = []

for l in links:
    try:
        page = requests.get(l, timeout=10)
        page.raise_for_status()  # 捕获请求错误
        soup = BeautifulSoup(page.content, 'lxml')
        
        # 定位文章主体区域(需根据实际页面结构调整,示例假设内容在class为"article-body"的容器内)
        article_body = soup.find('div', class_='article-body')
        if not article_body:
            article_contents.append("无有效文章内容")
            continue
        
        # 遍历该区域内所有<p>标签,提取非空文本
        paragraphs = []
        for p_tag in article_body.find_all('p'):
            text = p_tag.get_text(strip=True)
            if text:
                paragraphs.append(text)
        
        # 将当前文章的所有段落拼接为完整内容
        full_content = ' '.join(paragraphs)
        article_contents.append(full_content)
    
    except Exception as e:
        print(f"处理链接 {l} 时出错: {str(e)}")
        article_contents.append(f"处理失败: {str(e)}")

# 验证长度一致性
print(f"链接数量: {len(links)}")
print(f"文章内容数量: {len(article_contents)}")

关键修改点

  • 链接去重:避免重复处理同一篇文章,减少无效请求。
  • 定位文章主体:先找到文章内容的专属容器(需根据目标网站实际HTML结构替换article-body),避免抓取导航、页脚等无关的<p>标签。
  • 遍历所有段落:在文章主体内遍历全部<p>标签,提取所有段落文本,而非仅抓取单个id的标签。
  • 异常处理:捕获请求超时、页面不存在等错误,避免程序中断,同时记录错误信息。
  • 内容过滤:过滤空段落文本,提升内容质量。

注意事项

  • 需实际查看目标文章页面的HTML结构,确认文章内容所在的容器(class或id),替换代码中对应的选择器。
  • 频繁请求可能触发网站反爬机制,建议添加请求间隔(如time.sleep(1)),并设置合理的请求头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:10:35