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

如何爬取翻页时URL不变无新增请求的表格数据?以codal.ir站点为例

根因说明

你碰到的是前端本地分页场景:点击翻页不更新URL、也没有新的网络请求,说明110页的完整表格数据已经在你第一次GET请求时全部返回了,浏览器只是通过JS控制每次仅展示单页内容,你现在通过requests拿到的返回文本里已经包含全部数据,不需要额外处理翻页请求。
目标爬取页:https://www.codal.ir/CompanyList.aspx
页面截图

解决方案

方案一:requests + HTML解析(最适合当前场景,兼容你原本的实现思路)

不用正则也不用换工具,用BeautifulSoup解析HTML提取全部数据更稳定:

  1. 先安装依赖
pip install requests beautifulsoup4 lxml
  1. 示例代码
import requests
from bs4 import BeautifulSoup
import csv

sess = requests.Session()
resp = sess.get("https://www.codal.ir/CompanyList.aspx")
# 手动设置编码避免波斯语内容乱码
resp.encoding = "utf-8"

soup = BeautifulSoup(resp.text, "lxml")
# 已匹配该页面实际的公司列表表格ID
table = soup.find("table", id="ctl00_ContentPlaceHolder1_gvCompanyList")
# 跳过表头,取所有数据行
rows = table.find_all("tr")[1:]

all_data = []
for row in rows:
    cols = [col.get_text(strip=True) for col in row.find_all("td")]
    if cols:
        all_data.append(cols)

# 写入csv保存
with open("codal_company_list.csv", "w", encoding="utf-8-sig", newline="") as f:
    writer = csv.writer(f)
    # 可自行补充对应表头
    writer.writerows(all_data)

print(f"共获取到{len(all_data)}条数据,已全部导出")

如果你坚持要用正则提取,直接在resp.text里匹配所有表格行的对应规则即可,不需要做任何翻页相关的处理。

方案二:模拟浏览器方案(适合后续有动态交互需求的场景)

如果之后遇到真动态渲染的页面,也可以用playwright/selenium模拟点击翻页获取数据,对当前场景属于大材小用但也可实现:

  • 模拟浏览器打开目标页面
  • 循环点击下一页按钮,逐页提取当前展示的表格内容
  • 检测到下一页按钮不可点击时停止循环

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:09:03