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

如何解决爬取网站时返回的HTML表格为空的问题

问题分析

你当前拿到空表格的核心原因有3个:

  • 硬编码的token、Cookie都是单次会话临时有效的值,过期或者和当前请求会话不匹配时,服务端校验不通过就不会返回有效数据
  • 表单参数中caddesokak(对应街道字段)为空,若实际查询时该字段为必填项,空值提交本来就不会返回结果
  • 站点有CSRF校验规则,要求token必须和当前请求的会话Cookie绑定,你复制的旧token和Cookie和新请求的会话不匹配,会被服务端拦截
解决步骤
  1. 用requests.Session()维持同一会话,自动管理Cookie,不要手动硬编码Cookie值
  2. 先发GET请求访问查询表单页,从返回的HTML里提取实时生成的有效token值,替换你之前复制的过期token
  3. 补全所有必填的表单参数,可通过浏览器F12网络面板查看正常提交查询时的所有POST参数,确保所有必填项都赋值
  4. 若以上步骤还是无法拿到数据,直接用无头浏览器方案(playwright/selenium)模拟真实用户操作:打开表单页→选择对应查询条件→点击查询按钮→直接提取渲染后的表格内容,可绕过大部分反爬校验
修正示例代码
import requests
from bs4 import BeautifulSoup

# 初始化会话,自动维护Cookie
session = requests.Session()
# 配置基础请求头,和你本地浏览器UA保持一致即可
session.headers.update({
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8'
})

# 第一步:访问表单页,获取实时token
form_page_url = "https://www.turkiye.gov.tr/mersin-yenisehir-belediyesi-arsa-rayic-degeri-sorgulama"
form_resp = session.get(form_page_url)
soup = BeautifulSoup(form_resp.text, 'html.parser')
# 根据页面实际token字段的属性调整选择器,一般为隐藏的input字段
token = soup.find('input', attrs={'name': 'token'})['value']

# 第二步:构造完整请求参数,补全必填的街道字段
post_url = "https://www.turkiye.gov.tr/mersin-yenisehir-belediyesi-arsa-rayic-degeri-sorgulama?submit"
payload = {
    'btn': 'Sorgula',
    'caddesokak': '替换为你要查询的对应街道值',
    'id': '',
    'islem': '',
    'mahalle': '27',
    'token': token,
    'yil': '2021'
}

# 提交查询请求
result_resp = session.post(post_url, data=payload)
print(result_resp.text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:06:03