如何集成多日期URL获取功能到BeautifulSoup赔率爬虫输出单一DataFrame
集成实现方案
1. 前置封装校验
把你现有的7天URL提取逻辑封装为无参数函数get_7d_match_urls(),调用后直接返回包含所有赛事页面URL的列表。单独调用该函数验证返回结果,确保URL无重复、格式符合抓取要求。
2. 改造单页抓取函数
对原有单URL爬虫函数做异常兼容,避免单个页面抓取失败中断整个流程:
import pandas as pd from bs4 import BeautifulSoup from selenium import webdriver def crawl_single_page(url: str) -> pd.DataFrame: try: # 此处保留你原有的页面加载、解析、DataFrame生成逻辑不变 return page_df except Exception as e: print(f"页面抓取失败 {url}: {str(e)}") # 出错时返回空DataFrame,不影响后续合并 return pd.DataFrame()
3. 多线程批量抓取+结果合并
直接复用你原有的多线程逻辑,把URL列表作为任务输入,抓取完成后合并所有结果:
from concurrent.futures import ThreadPoolExecutor if __name__ == "__main__": # 获取所有待抓取URL target_urls = get_7d_match_urls() # 线程数建议设置为3~5,避免触发站点反爬限制 thread_num = 4 df_collection = [] with ThreadPoolExecutor(max_workers=thread_num) as pool: # 提交所有抓取任务 for res_df in pool.map(crawl_single_page, target_urls): if not res_df.empty: df_collection.append(res_df) # 合并所有页面的抓取结果,重置行索引 full_df = pd.concat(df_collection, ignore_index=True) # 可直接输出为csv或做后续处理 full_df.to_csv("7天足球赔率数据.csv", index=False, encoding="utf-8-sig")
4. 可选优化点
- 可以在
crawl_single_page中加入随机请求延迟、动态User-Agent,降低被反爬拦截的概率 - 复用Selenium driver实例,不要每个页面都新建driver,提升抓取效率
- 对
target_urls先做去重处理,避免重复抓取相同页面
内容的提问来源于stack exchange,提问作者user16304089
相关产品推荐
相关产品推荐

