> 文档中心 > python + pandas 如何实现web网页的断点连续采集

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

连续采集截图

菜鸟实战,持续学习!

美国云服务器