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

使用BeautifulSoup进行网页爬取返回空结果的原因排查

问题排查与修复

你的代码返回空结果主要有两个核心问题:

1. 提前处理HTML文本破坏了解析结构

你在把HTML传给BeautifulSoup之前,先用strip_accents处理了整个页面的文本内容。这个函数会修改字符编码,甚至可能破坏HTML标签的完整性——很多特殊字符在标签属性或结构里是必要的,提前处理会导致BeautifulSoup无法正确解析出DOM结构,自然拿不到文本。

正确的做法是:先让BeautifulSoup解析原始HTML,拿到文本后再去处理字符 accents。

2. 禁用重定向可能导致获取不到实际内容页面

你设置了allow_redirects=False,但目标网站可能存在跳转(比如域名内路径跳转),这会让你拿到的是重定向响应而非实际内容页面,自然解析不出文本。


修正后的代码

import requests
from bs4 import BeautifulSoup
import unicodedata

def strip_accents(text):
    try:
        text = unicode(text, 'utf-8')
    except NameError:  # unicode is default in Python 3
        pass

    text = unicodedata.normalize('NFD', text)\
           .encode('ascii', 'ignore')\
           .decode("utf-8")

    return str(text)

current_url = "https://www.diabete.qc.ca/en/understand-diabetes/all-about-diabetes/complications/female-sexuality-and-diabetes/"

try:
    # 允许重定向,去掉verify=False(如果有证书问题再考虑加)
    response = requests.get(current_url, headers={'User-Agent': 'Mozilla/5.0'})
    response.raise_for_status()  # 主动抛出HTTP错误,方便排查
except requests.exceptions.RequestException as e:  
    print("Error:", e)
else:
    # 直接用原始响应内容解析,不要提前处理
    soup = BeautifulSoup(response.content, "html.parser")
    # 先获取文本,再处理accents
    raw_text = soup.get_text(" ", strip=True)
    cleaned_text = strip_accents(raw_text)
    print(cleaned_text)

额外说明

  • 加上response.raise_for_status()可以帮你快速发现HTTP层面的错误(比如403、404),避免默默拿到空内容。
  • 尽量不要用verify=False,如果网站证书有问题,可以考虑安装信任证书,或者临时使用但不要长期保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:45:15