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

如何调试Python编写的CCASS ASPX表单网页爬虫无返回无报错问题

无结果也不报错的核心原因是:POST请求未拿到预期的搜索结果页,返回的HTML中没有匹配table tbody tr的元素,for循环未触发执行,因此既无输出也无报错。

调试步骤
  • 修正请求URL并校验响应状态
    原代码使用HTTP协议URL,目标站点已全站升级HTTPS,HTTP请求会触发301跳转导致POST参数丢失。先将URL替换为https://www.hkexnews.hk/sdw/search/searchsdw.aspx,同时打印POST请求的状态码和返回内容前缀,确认是否正常拿到结果页:
    # 加到POST请求之后
    print(req.status_code)
    print(req.text[:1000])
    
    若状态码不是200,或返回内容包含验证、报错提示,优先解决请求层面的问题。
  • 补全必填请求头
    ASPX站点通常会校验Referer请求头,缺少的话会直接拒绝搜索请求,在POST请求的headers中添加Referer字段:
    req = s.post(URL,data=payload,headers={
        "User-Agent":"Mozilla/5.0",
        "Referer": URL
    })
    
  • 校验提交的payload参数
    打印提取到的payload,确认__VIEWSTATE、__EVENTVALIDATION等ASPX必备动态参数是否正确提取,有没有遗漏其他隐藏字段。同时确认搜索参数的键名是否有变动,比如部分站点更新后txtStockCode可能改为其他命名。
  • 修正结果选择器
    站点更新后表格结构、类名可能发生变化,不要使用table tbody tr这类模糊选择器,先查看返回HTML中结果表格的id或类名,替换为更精准的选择器,比如该站点的结果选择器可改为:
    for items in soup_obj.select("div#pnlResult table tbody tr"):
    
修正后参考代码
import requests
from bs4 import BeautifulSoup

URL = "https://www.hkexnews.hk/sdw/search/searchsdw.aspx"

with requests.Session() as s:
    s.headers={"User-Agent":"Mozilla/5.0"}
    res = s.get(URL)
    soup = BeautifulSoup(res.text,"lxml")
    payload = {item['name']:item.get('value','') for item in soup.select("input[name]")}
    payload['__EVENTTARGET'] = 'btnSearch'
    payload['txtStockCode'] = '00001'
    req = s.post(URL,data=payload,headers={
        "User-Agent":"Mozilla/5.0",
        "Referer": URL
    })
    soup_obj = BeautifulSoup(req.text,"lxml")
    # 改用精准选择器
    for items in soup_obj.select("div#pnlResult table tbody tr"): 
        data = [item.get_text(strip=True) for item in items.select("td")]
        print(data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 14:57:01