
做量化的朋友应该都有过这种体验——每天盯着 A 股,偶尔瞟一眼美股、日经、欧洲三大指数,就怕哪天外盘暴跌,第二天一开盘懵了。
但手动查又麻烦,要么打开财经 App,要么挨个网站看。看完一圈,信息分散,效率极低。
所以我就想:能不能写一个脚本,一键把全球主要股指全拉回来,直接集成在自己的量化分析软件里?
这里数据源选的是 fx678.com,这个网站做全球行情挺久了,界面也整洁,最关键的是——全球股指页面用 HTML 表格直接渲染,不用绕过复杂的反爬机制,requests 直接能拿到数据,非常适合新手练手。
目标网址长这样:
https://quote.fx678.com/exchange/GJZS
后面的 GJZS 是区域代码,意思是"全球股指",换成 YTZS 就是亚太,OUZS 是欧洲,MZZS 是美洲。所以整个区域配置,我就用了一个字典搞定:
REGIONS = {
"全部": "GJZS",
"亚太": "YTZS",
"欧洲": "OUZS",
"美洲": "MZZS",
"其他": "QTZS",
}
要抓哪个区域,把对应的 code 拼到 URL 里就行了,简单直接。
整个爬虫的核心,不超过 30 行。先发请求,再用 BeautifulSoup 解析 HTML,找到页面里最大的那张表格,把表头和每一行数据都抓下来,装进字典里返回。
来看一下核心部分:
def fetch_by_html(category: str = "GJZS") -> list[dict]:
url = f"https://quote.fx678.com/exchange/{category}"
resp = requests.get(url, headers=HEADERS, timeout=15)
resp.encoding = "utf-8"
soup = BeautifulSoup(resp.text, "lxml")
# 找行数最多的表格
tables = soup.find_all("table")
target_table = max(tables, key=lambda t: len(t.find_all("tr")))
# 解析表头
headers_row = target_table.find("tr")
col_names = [th.get_text(strip=True) for th in headers_row.find_all(["th", "td"])]
# 逐行解析数据
records = []
for row in target_table.find_all("tr")[1:]:
cells = row.find_all(["td", "th"])
row_data = [c.get_text(strip=True) for c in cells]
records.append(dict(zip(col_names, row_data)))
return records
模式一:HTML 解析
就是上面说的那套,用 requests + BeautifulSoup,速度快,依赖少,适合"全部"区域这类静态渲染的页面。
模式二:API 接口
部分财经网站会有配套的 JSON 接口,如果能直接拿到结构化数据,那比解析 HTML 干净得多。类似这样:
def fetch_by_api(category: str = "GJZS") -> list[dict]:
try:
resp = requests.get(api_url, headers=HEADERS, timeout=10)
data = resp.json()
if isinstance(data, list) and data:
return data
...
except Exception:
pass
模式三:Selenium或playwright(终极方案)
有些页面是 JS 动态渲染的,requests 拿回来的 HTML 里压根没有数据。这时候就得搬出 Selenium 或playwright了——它能真正打开浏览器,等页面完全加载后再抓内容:
driver = webdriver.Chrome(options=opts)
driver.get(url)
WebDriverWait(driver, 20).until(
EC.presence_of_element_located((By.TAG_NAME, "table"))
)
# 再用 BeautifulSoup 解析渲染后的页面源码
soup = BeautifulSoup(driver.page_source, "lxml")
很多人觉得爬虫"复杂",其实核心逻辑真的没几行——发请求 → 拿 HTML → 找表格 → 解析数据,就这四步。难的不是代码,是理解网页结构,以及知道遇到 JS 渲染的时候该怎么绕过去。
现在有了openclaw龙虾以后,抓取网站非常容易。
有同学反馈没看到昨天发的文章具体内容, 被人投诉平台删掉了。写一篇科普文章咋这么难呢?