python + pandas 如何实现web网页的断点连续采集
目录
一、实战场景
二、知识点
python 基础语法
python 文件读写
pandas 数据处理
web 连续采集
三、菜鸟实战
列表页断点连续采集基本思路
基本思路
网页列表页断点连续采集实现
Pandas 保存数据 csv 文件
详情页断点采集思路
基本思路
网页详情页断点连续采集代码实现
Pandas 保存数据 csv 文件
运行结果
运行效果
连续采集截图
一、实战场景
python + pandas 如何实现web网页的断点连续采集
二、知识点
python 基础语法
python 文件读写
pandas 数据处理
web 连续采集
三、菜鸟实战
列表页断点连续采集基本思路
基本思路
列表页采集的时候,采集数据保存到文件, 每次采集的时候,通过读取文件确认上一次采集的页面
网页列表页断点连续采集实现
def __init__(self): # 初始化日志 self.init_log() # 默认采集的上一页为第 1 页 start_page = self.PAGE_START list_file_path = self.fileManger.get_data_file_path(self.list_data_file) if os.path.isfile(list_file_path): # 读取列表文件, 确定上一次采集的第几页, 以支持连续采集 self.logger.info("数据文件存在") self.data_file_exist = True # 计算从第几页开始采集 list_df = pd.read_csv(list_file_path, usecols=['第几页'], encoding=self.encoding) max_page = pd.DataFrame(list_df[2:]).max() start_page = int(max_page) + 1 print("采集页面范围: 第[%s]页至第[%s]页" % (start_page, start_page + self.PAGE_STEP - 1)) for page in range(start_page, start_page + self.PAGE_STEP): # 初始化采集链接 url = self.target_url.replace("p1", "p" + str(page)) # 构造采集对象 url_item = UrlItem(url=url, page=page) self.url_items.append(url_item)
Pandas 保存数据 csv 文件
def save_to_file(self, data, cols): # 保存到文件 file_path = self.fileManger.get_data_file_path(self.list_data_file) # 初始化数据 frame = pd.DataFrame(data) if not self.data_file_exist: # 第一次写入带上列表头,原文件清空 frame.columns = cols frame.to_csv(file_path, encoding=self.encoding, index=None) self.data_file_exist = True # 写入后更新数据文件状态 else: # 后续不写如列表头,追加写入 frame.to_csv(file_path, mode="a", encoding=self.encoding, index=None, header=0) self.logger.debug("文件保存完成")
详情页断点采集思路
基本思路
详情页采集的时候,采集数据保存到文件, 为避免重复采集,每次采集的时候,确认采集链接是否在采集的数据文件中,如果在则跳过采集,不在就执行采集
网页详情页断点连续采集代码实现
def __init__(self): # 初始化日志 self.init_log() # 从列表文件读取等待采集的链接 list_file_path = self.fileManger.get_data_file_path(self.list_data_file) list_df = pd.read_csv(list_file_path, encoding=self.encoding) self.url_items = list_df.values # 初始化待采集链接数组 detail_file_path = self.fileManger.get_data_file_path(self.detail_data_file) if os.path.isfile(detail_file_path): # 从详情文件读取已采集的信息 self.data_file_exist = True detail_df = pd.read_csv(detail_file_path, encoding=self.encoding) self.detail_df = detail_df
Pandas 保存数据 csv 文件
def save_to_detail_file(self, data, cols): # 保存到详情文件 file_path = self.fileManger.get_data_file_path(self.detail_data_file) # 初始化数据 frame = pd.DataFrame(data) if not self.data_file_exist: # 第一次写入带上列表头,原文件清空 frame.columns = cols frame.to_csv(file_path, encoding=self.encoding, index=None) self.data_file_exist = True # 写入后更新数据文件状态 else: # 后续不写如列表头,追加写入 frame.to_csv(file_path, mode="a", encoding=self.encoding, index=None, header=0) self.logger.debug("文件保存完成")
运行结果
运行效果
采集页面范围: 第[16]页至第[20]页
100%|██████████| 5/5 [00:14<00:00, 2.91s/it]
python 版本 3.10.4
连续采集截图
菜鸟实战,持续学习!