如何用Python或Curl下载纽交所股票代码列表?Curl命令问题解决
解决NYSE股票代码列表下载问题
我来帮你搞定这个问题!你遇到的情况主要是两个原因导致的:一是bash shell里的URL参数没处理好,二是纳斯达克网站的反爬机制拦截了默认的curl请求标识。下面分别给出curl和Python的可行方案:
使用curl实现下载
你之前的命令失败,首先是因为URL里的&在bash中会被解析成后台运行的符号,导致render=download被当成了新的命令;其次,网站会识别默认的curl User-Agent并拦截请求。解决方法如下:
把整个URL用双引号包裹,同时添加模拟浏览器的User-Agent参数:
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" "http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NYSE&render=download" -o nyse_stocks.csv
-A参数用来设置请求的User-Agent,模拟浏览器访问,避免被反爬拦截- 双引号包裹URL,确保
&符号被正确解析为URL参数的分隔符 -o参数指定保存的文件名,这里保存为nyse_stocks.csv
使用Python实现自动下载
如果要做成每日自动运行的程序,Python会更灵活,推荐用requests库来实现:
- 先安装依赖库(如果没装过的话):
pip install requests
- 编写下载脚本:
import requests from datetime import datetime # 可选,用来给文件名加上日期,方便每日归档 # 目标URL url = "http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NYSE&render=download" # 模拟浏览器的请求头,关键是User-Agent headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36", "Accept-Language": "en-US,en;q=0.9" } try: # 发送GET请求 response = requests.get(url, headers=headers) response.raise_for_status() # 如果请求失败(比如403、404),抛出异常 # 可选:给文件名加上当前日期,方便区分每日数据 today_date = datetime.now().strftime("%Y%m%d") filename = f"nyse_stocks_{today_date}.csv" # 保存文件 with open(filename, "wb") as f: f.write(response.content) print(f"成功下载NYSE股票代码列表到文件:{filename}") except Exception as e: print(f"下载失败,错误信息:{e}")
- 设置每日自动运行:
- 如果你用Windows,可以创建任务计划,每天定时运行这个Python脚本
- 如果你用Linux/macOS,可以用crontab添加定时任务,比如每天凌晨2点运行:
0 2 * * * /usr/bin/python3 /path/to/your/script.py
内容的提问来源于stack exchange,提问作者Saqib Ali




