如何用Python将网页爬取信息发送至Discord Webhook?
解决Discord Webhook推送库存信息的问题
首先先帮你修正现有代码里的语法错误:你的导入语句把三个模块写在一行却没加逗号,这会直接导致代码运行失败。正确的导入应该分开写:
from bs4 import BeautifulSoup import requests import json
接下来咱们一步步实现把库存状态发送到Discord Webhook的功能。Discord Webhook接受POST请求,需要特定格式的JSON payload。下面是完整的修正版代码,我会给你拆解关键部分:
from bs4 import BeautifulSoup import requests import json # 替换成你自己的Discord Webhook链接(从服务器设置的集成里创建) DISCORD_WEBHOOK_URL = "你的Webhook地址" TARGET_PRODUCT_URL = "http://www.jimmyjazz.com/mens/footwear/adidas-superstar/S82215?color=Brown" def check_product_stock(): try: # 获取商品页面源码 source = requests.get(TARGET_PRODUCT_URL).text soup = BeautifulSoup(source, 'lxml') size_container = soup.find('div', class_='box_wrapper') if not size_container: # 处理找不到尺码区域的异常情况 send_to_discord("⚠️ 库存检查失败:页面中找不到尺码选择模块") return size_links = size_container.find_all('a') has_in_stock = False # 遍历所有尺码,判断是否有可购买的选项 for link in size_links: # 用get方法避免找不到class属性时报错 if "piunavailable" not in link.get("class", []): has_in_stock = True break # 构造要发送的消息内容 if has_in_stock: message_content = f"✅ 商品有库存啦!\n商品链接:{TARGET_PRODUCT_URL}" else: message_content = f"❌ 商品暂时缺货\n商品链接:{TARGET_PRODUCT_URL}" # 推送消息到Discord send_to_discord(message_content) except Exception as e: # 捕获所有异常,把错误信息推送到Discord方便排查 error_message = f"❌ 库存监控脚本出错:{str(e)}" send_to_discord(error_message) def send_to_discord(content): # 构造Discord接受的JSON格式数据 webhook_payload = { "content": content, # 可选:自定义机器人的用户名和头像,不需要可以删掉这两行 "username": "库存监控小助手", "avatar_url": "https://example.com/robot-avatar.png" } try: # 发送POST请求到Webhook地址 response = requests.post(DISCORD_WEBHOOK_URL, json=webhook_payload) # 检查请求是否成功,失败则抛出异常 response.raise_for_status() print("消息已成功推送到Discord") except requests.exceptions.RequestException as e: print(f"推送消息失败:{str(e)}") # 运行库存检查逻辑 if __name__ == "__main__": check_product_stock()
关键细节说明:
- 异常处理:添加了try-except块,能捕获页面请求失败、元素找不到等问题,避免脚本直接崩溃,还能把错误信息推给你
- Webhook适配:
send_to_discord函数专门处理Discord的推送逻辑,完全符合Discord Webhook的格式要求 - 库存判断优化:只要找到一个可购买的尺码就停止遍历,提升效率;用
link.get("class", [])避免找不到class属性时报错 - 可读性优化:把代码拆分成两个函数,逻辑更清晰,后续维护也方便
必做事项:
- 把
DISCORD_WEBHOOK_URL替换成你自己的Discord服务器Webhook链接(在服务器设置→集成→Webhooks里创建) - 确保你的Python环境安装了
beautifulsoup4和requests,没装的话运行pip install beautifulsoup4 requests - 如果网站有反爬机制,可以给
requests.get添加headers参数(比如headers={"User-Agent": "Mozilla/5.0..."})避免被拦截
内容的提问来源于stack exchange,提问作者Nathan Gorham
相关产品推荐
相关产品推荐

