Python如何实现多页循环遍历爬取网页表格数据
无数字页码站点多页表格爬取方案
你已经确认站点翻页逻辑为URL末尾拼接&pageno=页码参数,不需要模拟点击下一页按钮,直接通过循环构造分页URL、判断页面有效内容作为终止条件即可完成全量数据爬取,修正后的可运行代码如下:
import requests import csv import time from bs4 import BeautifulSoup headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'} base_url = 'https://www.revcomps.com/past-entry-lists/?draw_chosen=2693823' # 初始化存储所有数据的列表,第一行存表头 all_data = [] page = 1 while True: print(f"正在爬取第{page}页...") # 构造当前分页URL current_url = f"{base_url}&pageno={page}" r = requests.get(current_url, headers=headers) soup = BeautifulSoup(r.text, 'html.parser') # 查找当前页的目标表格 table = soup.find('table', {'class':'ticket_results'}) # 找不到表格说明已经爬到最后一页之后,终止循环 if not table: print(f"第{page}页无有效表格数据,爬取结束,共爬取{page-1}页数据") break # 第一页的时候提取表头 if page == 1: headers_row = [th.text.strip() for th in table.find_all('th')] all_data.append(headers_row) # 提取当前页所有表格行数据 for tr in table.find_all('tr')[1:]: # 跳过表头行 row_data = [td.text.strip() for td in tr.find_all('td')] # 过滤空行 if row_data: all_data.append(row_data) # 页码+1,加延时避免请求过快被封 page += 1 time.sleep(1.5) # 所有数据存入csv with open('revcomps_data.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerows(all_data) print(f"数据已全部存入revcomps_data.csv,共{len(all_data)-1}条有效记录")
核心逻辑说明
- 分页构造:统一按照站点规则在基础URL后拼接
&pageno=页码参数,第一页对应pageno=1,和站点原生翻页逻辑完全一致,不需要额外模拟按钮点击 - 终止判断:不需要提前获取总页数,每次请求后判断当前页是否存在目标class的表格,无有效表格时直接终止循环,完美适配无数字页码的站点场景
- 反爬规避:每次请求间隔1.5秒,使用常规浏览器UA,避免短时间高频请求触发站点拦截
- 数据结构化:按表格行提取数据,自动提取表头、过滤空行,最终直接输出可直接使用的结构化CSV文件,解决原代码中所有单元格数据混在同一列表的问题
内容的提问来源于stack exchange,提问作者David Burton
相关产品推荐
相关产品推荐

