Python Pandas网站数据自动采集遇URL拼接错误求助
问题分析及解决方案
错误原因
- 循环内错误覆盖变量:
name = entry + 1逻辑混乱(字符串加数字无意义),还覆盖了原本存储Ticker列表的name变量,导致后续迭代异常。 - 未处理无效数据:
table["Ticker"]包含NaN空值,部分Ticker带有空格,这些都会让拼接后的URL出现无效控制字符。 - URL拼接逻辑错误:直接将Ticker拼在主域名后不符合网站路径规则,正确的公司详情页路径应为
http://openinsider.com/symbol/[TICKER](根据网站结构推断)。
修复后的代码
import numpy as np import pandas as pd import requests url1 = "http://openinsider.com/latest-penny-stock-buys" df1 = pd.read_html(url1) table = df1[11] # 计算99分位数(原代码注释标注20th percentile是错误的) n = np.quantile(table["Qty"], [0.99]) print("99th percentile: ", n) # 按Qty降序排序 q = table.sort_values("Qty", ascending=False) # 清理Ticker:去除数字、空值和前后空格 cleaned_tickers = q["Ticker"].str.replace("\d+", "", regex=True).dropna().str.strip() # 公司详情页基础URL base_url = "http://openinsider.com/symbol/" for ticker in cleaned_tickers: # 跳过空的Ticker if not ticker: continue try: # 拼接正确的URL full_url = base_url + ticker table2 = pd.read_html(full_url) # 根据实际页面结构调整索引,此处暂用原代码的11,需自行验证 df2 = table2[11] print(f"=== {ticker} 详情数据 ===") print(df2) except Exception as e: print(f"获取{ticker}数据失败: {str(e)}")
关键修复点
- 清理Ticker列:用
str.replace去除数字、dropna过滤空值、str.strip去除前后空格,确保每个Ticker都是有效字符串。 - 避免变量覆盖:循环使用
ticker作为迭代变量,保留原列表变量不被修改。 - 修正URL路径:调整为符合网站规则的
symbol/[TICKER]格式,保证URL合法。 - 添加异常处理:捕获请求或解析错误,避免单个Ticker出错导致整个脚本终止。
内容的提问来源于stack exchange,提问作者Ok-Investments
相关产品推荐
相关产品推荐

