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

抓取指定页面body元素class属性并写入TXT文件时脚本无输出的技术求助

脚本无反应的问题排查与修复方案

嘿,我帮你仔细捋了下这个Python脚本,它运行后没动静主要是几个关键的逻辑错误、属性匹配问题,还有一个容易忽略的细节导致的,下面给你拆解问题点,再附上修复后的完整代码:

核心问题分析

  • 属性名完全写错了:目标页面的body标签属性是data-containr="body",但你脚本里写的是datacontainer_="body",这直接导致BeautifulSoup找不到任何元素,后续代码自然不会执行。
  • find_all返回值处理错误:find_all返回的是元素列表,你直接调用.get('class')会触发AttributeError(列表没有这个方法),但因为没加异常捕获,脚本直接静默终止了。
  • 文件操作逻辑有问题:
    • 用"r"模式打开不存在的adidaslive.txt会直接报错,导致脚本停掉;
    • 直接判断url not in rf是完全错误的,rf是文件对象,不能这么做,得先把文件内容读成字符串再判断;
    • 你获取的url其实是class属性的列表,直接写入文件会变成['cms-no-route', ...]这种不友好的格式,得转成字符串。
  • 没调用定义好的函数:原脚本只写了get()函数的定义,但最后没执行get(),这也是脚本运行后啥也不做的重要原因!
  • 缺导入语句:脚本里用到了requests、BeautifulSoup和randomheaders,但没写导入,运行时会先报NameError,直接终止。

修复后的完整代码

import requests
from bs4 import BeautifulSoup
# 确保你已经安装了randomheaders库,或者替换成自定义的请求头
import randomheaders

def get(): 
    try:
        # 发送请求获取页面源码
        source = requests.get(
            "https://shop.adidas.ae/en/yeezy-boost-350-v2-ash-pearl/GY7658.html", 
            headers=randomheaders.LoadHeader()
        ).text 
        soup = BeautifulSoup(source, 'lxml') 
        # 正确匹配data-containr属性:BeautifulSoup用下划线替代HTML属性的连字符
        body_tag = soup.find('body', data_containr="body") 
        if not body_tag:
            print("没找到目标body标签,可能页面结构更新了?")
            return
        
        # 把class列表转成空格分隔的字符串,方便写入文件
        class_list = body_tag.get('class')
        class_str = ' '.join(class_list)
        filename = "adidaslive.txt" 

        # 处理文件:先读取现有内容,判断是否已存在
        existing_content = ""
        try:
            with open(filename, "r", encoding="utf-8") as rf:
                existing_content = rf.read()
        except FileNotFoundError:
            # 文件不存在,直接跳过读取,后面会自动创建
            pass
        
        if class_str not in existing_content: 
            print(f"发现新内容,已写入:{class_str}")
            with open(filename, "a", encoding="utf-8") as af: 
                af.write("\n" + class_str) 
        else: 
            print("内容已经存在啦,不用重复写入")
    except Exception as e:
        print(f"运行时出错了:{str(e)}")

# 执行定义好的函数
get()

关键修复点说明

  1. 属性匹配修正:把错误的datacontainer_="body"改成data_containr="body",对应原标签的data-containr属性(BeautifulSoup会自动把HTML属性的连字符转成下划线作为关键字参数)。
  2. 元素获取修正:用find()替代find_all(),因为页面只有一个body标签,直接获取单个元素更高效,也避免了列表处理的麻烦。
  3. 文件逻辑优化:
    • 加入了文件不存在的异常处理,避免报错;
    • 把class列表转成字符串,写入文件更整洁;
    • 先读取文件内容再判断是否重复,逻辑更合理。
  4. 添加异常捕获:外层的try-except能捕获请求失败、解析错误等各种异常,让你能看到具体错误信息,而不是莫名其妙的无反应。
  5. 添加函数调用:补上了get()函数的执行语句,这是原脚本最容易忽略的点!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:32:46