如何爬取翻页时URL不变无新增请求的表格数据?以codal.ir站点为例
根因说明
你碰到的是前端本地分页场景:点击翻页不更新URL、也没有新的网络请求,说明110页的完整表格数据已经在你第一次GET请求时全部返回了,浏览器只是通过JS控制每次仅展示单页内容,你现在通过requests拿到的返回文本里已经包含全部数据,不需要额外处理翻页请求。
目标爬取页:https://www.codal.ir/CompanyList.aspx
解决方案
方案一:requests + HTML解析(最适合当前场景,兼容你原本的实现思路)
不用正则也不用换工具,用BeautifulSoup解析HTML提取全部数据更稳定:
- 先安装依赖
pip install requests beautifulsoup4 lxml
- 示例代码
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
相关产品推荐
相关产品推荐

