使用BeautifulSoup采集网页数据时无法提取目标价格值问题求解
问题原因
- 语法作用域与执行顺序错误
你定义的price变量是test()函数内的局部变量,函数外无法直接访问;同时代码的执行顺序是先执行print(price)再调用test(),就算没有作用域问题也无法正常拿到返回值。 - 缺请求头触发网站反爬
目标站点对无合法请求头的爬虫请求会返回阉割版页面,对应pc-lowest-1节点的内容默认就是-,和你浏览器中看到的渲染后页面结构不一致。 - 文本提取方式稳定性低
直接用get_text()提取会包含节点内多余的空格、img标签附属的空文本,优先提取data-price自定义属性值准确性更高。
修复后可运行代码
import requests from bs4 import BeautifulSoup URL = 'https://www.futbin.com/22/player/426' # 添加模拟浏览器的请求头,绕过基础反爬 HEADERS = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", "Referer": "https://www.futbin.com/" } def test(): page = requests.get(URL, headers=HEADERS) soup = BeautifulSoup(page.content, 'html.parser') price_node = soup.find(id="pc-lowest-1") # 优先提取data-price属性值 if price_node: price = price_node.get("data-price") # 如果一定要提取节点内文本,替换为下行即可: # price = price_node.get_text(strip=True) return price return None # 先调用函数拿到返回值再打印 price = test() print(price)
内容的提问来源于stack exchange,提问作者HPA Informática
相关产品推荐
相关产品推荐

