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

使用BeautifulSoup+Python爬取网页时无法获取正确结果计数问题

解决KAP网站结果计数爬取问题

问题原因

你拿到的{{memberVm.disclosures.length}}是前端模板占位符,说明这个页面的内容是JavaScript动态渲染的。requests库只能获取服务器返回的静态HTML,无法执行页面中的JS代码,所以拿不到实际渲染后的数字。

解决方案

有两种可行的方法获取真实结果计数:

方法1:使用Selenium模拟浏览器加载JS

Selenium可以模拟真实浏览器打开页面,等待JS渲染完成后再提取内容,步骤如下:

  1. 安装Selenium:pip install selenium,同时下载对应浏览器的驱动(比如ChromeDriver)
  2. 使用以下代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

URL = 'https://www.kap.org.tr/tr/bildirim-sorgu?srcbar=Y&cmp=Y&cat=4&s=srp2205201503&st=Yeni%20%C4%B0%C5%9F%20%C4%B0li%C5%9Fkisi&kw=yeni%20i%C5%9F%20ili%C5%9Fkisi&slf=ALL'

# 配置Chrome无头模式(可选,不打开浏览器窗口)
options = webdriver.ChromeOptions()
options.add_argument('--headless=new')
options.add_argument('--disable-gpu')
options.add_argument("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")

driver = webdriver.Chrome(options=options)
driver.get(URL)

# 等待计数元素加载完成,最多等待10秒
wait = WebDriverWait(driver, 10)
count_element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '[style="font-weight : bold; "]')))
number_of_notifications = count_element.text
print(number_of_notifications)

driver.quit()

方法2:直接调用网站的API接口(更高效)

通过浏览器开发者工具抓包,可以找到页面加载数据的API接口,直接请求该接口获取原始数据,无需渲染页面:

  1. 打开目标页面,按F12打开开发者工具,切换到「网络」标签
  2. 刷新页面,筛选XHR/fetch请求,找到返回披露数据的接口(通常包含disclosures关键词)
  3. 复制接口URL和请求参数,用requests直接请求:
import requests

# 替换为抓包得到的真实API地址
API_URL = 'https://www.kap.org.tr/api/v1/disclosures'
params = {
    'srcbar': 'Y',
    'cmp': 'Y',
    'cat': '4',
    's': 'srp2205201503',
    'st': 'Yeni İş İlişkisi',
    'kw': 'yeni iş ilişkisi',
    'slf': 'ALL'
}
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",
    "X-Requested-With": "XMLHttpRequest"
}

response = requests.get(API_URL, headers=headers, params=params)
response.raise_for_status()  # 检查请求是否成功
data = response.json()

# 从返回的JSON中提取计数,示例假设数据在disclosures数组中
count = len(data['disclosures'])
print(f"{count} bildirim bulundu.")

注意事项

  • API接口可能会随网站更新变化,需要定期验证接口有效性
  • 确保请求头和浏览器一致,避免被网站拦截
  • 遵守KAP网站的使用条款,不要过度频繁请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:52:49