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

使用BeautifulSoup提取HTML标签返回None,代码异常排查求助

问题分析与修复方案

核心错误点

  • 请求未做有效性校验:发送POST请求后没检查响应状态,若请求失败(如404、500),response.text返回的不是目标页面HTML,自然找不到对应标签。
  • 解析器兼容性问题:html.parser对复杂HTML结构支持有限,你已导入html5lib,用它解析能避免标签解析丢失的情况。
  • 逻辑匹配错误:compare函数里判断soup.find("tbody")存在,却去查找html根标签(毫无实际意义),完全偏离了抓取表格内容的目标。

修复后的代码

import requests
from bs4 import BeautifulSoup

url = "https://trouver-ip.com"
ip = input("Choisissez une IP : ")
response = requests.post(url, data={"ip": ip})

# 先校验请求是否成功
if response.status_code != 200:
    print(f"请求失败,状态码:{response.status_code}")
else:
    # 使用html5lib解析器提升兼容性
    soup = BeautifulSoup(response.text, "html5lib")
    
    def compare():
        tbody = soup.find("tbody")
        if tbody:
            # 抓取tbody内的表格行,可根据需求调整为td等标签
            tableau = tbody.find_all("tr")
            return tableau
        else:
            print("未找到表格内容,检查IP有效性或页面结构是否变更")
    
    tableau = compare()
    # 遍历打印结果,可按需提取单元格具体内容
    for row in tableau:
        print(row.get_text(strip=True, separator=" | "))

额外提示

  1. 参数确认:通过浏览器开发者工具查看网络请求的Form Data,确认网站接收的参数名确实是ip。
  2. 动态内容排查:若修复后仍找不到标签,可能页面是JS动态渲染的,需用selenium等工具模拟浏览器加载页面。
  3. 内容提取优化:如果需要单元格内容,可在获取tr后,进一步用find_all("td")提取每个单元格的文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:10:30