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

使用BeautifulSoup爬取韩国汇率表格返回空结果的问题求助

排查爬取韩国汇率数据无有效内容的原因及解决方案

可能的原因

  • 数据动态加载:你用requests.get获取的是页面初始静态HTML,而汇率表格数据大概率是通过JavaScript(比如AJAX请求)动态渲染到页面的,初始HTML里仅包含标题框架,没有实际汇率数据。
  • 选择器稳定性差:你依赖的#frm_SearchDate > div:nth-child(17) > table选择器,完全绑定了父元素下第17个div的位置。一旦页面结构发生变化(比如新增广告、弹窗元素),这个位置就会失效,导致选中的容器里只有标题文本。

验证与解决方法

1. 确认数据加载方式并针对性处理

打开浏览器开发者工具(F12),切换到Network标签后刷新页面:

  • 若找到返回汇率数据的XHR/Fetch接口(通常是JSON格式),直接用requests请求该接口获取数据,这比解析HTML高效得多。
  • 若无独立数据接口,说明数据是前端JS渲染生成,需用Selenium模拟浏览器加载完整页面:
    from selenium import webdriver
    from bs4 import BeautifulSoup
    import time
    
    url = "http://www.smbs.biz/ExRate/StdExRate.jsp"
    driver = webdriver.Chrome()  # 需提前安装对应版本的ChromeDriver
    driver.get(url)
    time.sleep(2)  # 等待页面渲染完成
    
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    # 改用基于内容的稳定选择器定位表格
    table = soup.find('table', text=lambda t: t and '일별 매매기준율' in t)
    print(table.text.strip())
    
    driver.quit()
    

2. 优化选择器

放弃依赖元素位置的nth-child选择器,改用更可靠的标识:

  • 通过表格标题文本定位:soup.find('table', text=lambda t: t and '일별 매매기준율' in t)
  • 查看表格父元素的特定class/id(比如检查页面HTML中表格所在div的class属性),用类选择器定位:soup.select_one('.rate-table-wrap table')(示例类名需根据实际页面调整)

3. 模拟浏览器请求(可选)

若网站有基础反爬,可添加请求头模拟浏览器访问,避免被识别为爬虫:

import requests
from bs4 import BeautifulSoup

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}
url = "http://www.smbs.biz/ExRate/StdExRate.jsp"
html = requests.get(url, headers=headers, verify=False).text
soup = BeautifulSoup(html, 'html.parser')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:55:59