使用pandas循环爬取多页网页表格仅得到最后一页结果问题
多分页表格爬取仅保存最后一页数据的修复方法
问题原因
- 循环爬取分页的逻辑中,每次执行
df[0].to_csv('tab.csv',index=False)时,默认使用覆盖写入模式:每爬完一页就会清空文件原有内容,写入当前页数据。循环结束后文件内自然只保留最后一页的爬取结果。
修复方案
方案1:聚合所有页数据后一次性导出(推荐)
逻辑简单不易出错,适合总数据量不大的场景:
import pandas as pd all_page_data = [] # 遍历所有分页 for page in range(1, 26): target_url = f'https://www.baroul-cluj.ro/tabloul-avocatilor/avocati-definitivi/?wpv_view_count=9662&wpv_post_search=&wpv_paged={page}' # 读取当前页的第一个表格 current_df = pd.read_html(target_url)[0] all_page_data.append(current_df) # 合并所有分页数据,重置索引 final_df = pd.concat(all_page_data, ignore_index=True) # 导出为csv,utf-8-sig编码避免Excel打开乱码 final_df.to_csv('tab.csv', index=False, encoding='utf-8-sig')
方案2:边爬边追加写入
适合数据量较大、不想占用太多内存的场景,需要注意控制写入模式和表头输出:
import pandas as pd for page in range(1, 26): target_url = f'https://www.baroul-cluj.ro/tabloul-avocatilor/avocati-definitivi/?wpv_view_count=9662&wpv_post_search=&wpv_paged={page}' current_df = pd.read_html(target_url)[0] if page == 1: # 第一页用覆盖写入模式,写入表头 current_df.to_csv('tab.csv', index=False, encoding='utf-8-sig', mode='w') else: # 后续页用追加写入模式,不重复写入表头 current_df.to_csv('tab.csv', index=False, encoding='utf-8-sig', mode='a', header=False)
注意:如果爬取过程中出现请求失败,可以在循环内加适当的延时和异常捕获逻辑,避免被站点反爬拦截。
内容的提问来源于stack exchange,提问作者Amen Aziz
相关产品推荐
相关产品推荐

