使用BeautifulSoup与Requests提取XML页面数据无法打印结果问题
解决XML页面抓取无输出的问题
我来帮你排查下代码里的问题,导致没输出的原因主要有这几点,咱们逐个解决:
1. 变量名笔误
你用soup.find_all("x")把结果存到了steamID变量,但最后打印的是y——这个不存在的变量当然不会有输出,得改成打印steamID或者遍历它的内容。
2. 错误的解析器选择
BeautifulSoup的html.parser是专门处理HTML的,用它解析XML会因为规则不匹配导致标签识别失败。你应该使用XML专用的解析器,比如lxml-xml(需要先安装lxml库)。
3. 潜在的URL问题
代码里的url = "website.com?xml=1"缺少了http://或https://前缀,正常情况下requests会直接报错,但你说程序没报错,估计实际使用的是完整URL,不过还是要确认URL能正常返回XML内容。
4. 目标标签是否存在
要确认返回的XML里确实包含<x>标签,如果标签名写错了,find_all会返回空列表,自然没输出。可以先打印result.text看看原始XML内容,核对标签名。
修正后的完整代码
import time import requests from bs4 import BeautifulSoup # 补全完整URL前缀 url = "https://website.com?xml=1" result = requests.get(url) # 先确认请求是否成功 if result.status_code == 200: content = result.content # 使用lxml-xml解析XML soup = BeautifulSoup(content, "lxml-xml") # 查找所有<x>标签,替换成你实际要找的标签名 steamID_list = soup.find_all("x") print(f"共找到 {len(steamID_list)} 条结果:") for item in steamID_list: # 打印标签内的文本,若要获取属性可使用 item.get("属性名") print(item.text.strip()) else: print(f"请求失败,状态码:{result.status_code}")
额外注意事项
- 先安装lxml库:执行
pip install lxml,如果不想安装第三方库,也可以尝试"xml"解析器,但lxml的XML处理能力更强。 - 如果XML带有命名空间(比如
<ns:x>),需要在标签名前加上命名空间,例如soup.find_all("{http://your-namespace-url}x")。 - 可以先打印
result.text查看返回的原始内容,确认XML结构和标签是否符合预期。
内容的提问来源于stack exchange,提问作者Spaceglider
相关产品推荐
相关产品推荐

