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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:15:35