Python爬取Rajya Sabha网站表格结果不符问题求助
修正Rajya Sabha气候变化辩论数据爬取代码
问题分析
原代码的核心问题:
- 未更新页面解析结果:循环请求新页面后,没有重新用BeautifulSoup解析新页面,始终复用初始页面的
table1对象,导致反复爬取第一页数据 - 分页参数错误:每页显示100条数据(
rpp=100),start参数应按100递增(0、100、200...),而非从0到96逐个累加 - 数据写入逻辑混乱:表头被重复写入,且每次循环都追加行数据,容易造成数据重复或格式异常
修正后的代码
import requests import pandas as pd from bs4 import BeautifulSoup import lxml # 初始化存储容器 all_rows = [] table_headers = [] # 基础URL模板,通过替换start参数实现分页 base_url = "https://rsdebate.nic.in/simple-search?query=climate+change&sort_by=dc.identifier.sessionnumber_sort&order=asc&rpp=100&etal=0&start={}" # 先获取表头(仅需一次) first_response = requests.get(base_url.format(0)) first_soup = BeautifulSoup(first_response.text, 'lxml') target_table = first_soup.find('table', id='sam_table') for th in target_table.find_all('th'): table_headers.append(th.text.strip()) # 分页爬取(按每页100条,共96页计算,可根据实际数据量调整范围) for start_num in range(0, 9600, 100): current_url = base_url.format(start_num) response = requests.get(current_url) soup = BeautifulSoup(response.text, 'lxml') current_table = soup.find('table', id='sam_table') # 提取当前页的行数据(跳过表头行) for row in current_table.find_all('tr')[1:]: row_content = [td.text.strip() for td in row.find_all('td')] all_rows.append(row_content) print(f"已完成第 {start_num//100 + 1} 页爬取") # 转换为DataFrame并写入CSV final_data = pd.DataFrame(all_rows, columns=table_headers) final_data.to_csv('rs_debate_data.csv', index=False) print("数据爬取完成,已保存至rs_debate_data.csv")
代码说明
- 分页逻辑优化:用
range(0, 9600, 100)生成正确的分页参数,匹配每页100条的设置 - 页面解析更新:每次请求新页面后,重新生成
soup和table对象,确保处理当前页的最新内容 - 数据收集优化:先将所有数据存入列表,最后统一转换为DataFrame写入CSV,减少IO操作次数,避免表头重复
- 文本清理:用
strip()去除文本中的多余空格和换行,保证数据整洁
内容的提问来源于stack exchange,提问作者zzzz
相关产品推荐
相关产品推荐

