Python如何减少嵌套循环耗时 优化ESPN球员数据爬取效率
代码优化方案
你当前代码效率低下的核心原因是内层循环重复调用find_all方法,每遍历一个下标j就会重新解析DOM查找对应元素,查找操作会被执行几十到上百次,自然耗时很长。
优化后代码(修改逻辑最小的版本)
单次查找将所有匹配元素存入临时变量,直接遍历元素而非下标,完全避免重复查询DOM:
players_by_temp = [] for i in range(20): anchor_links = html_table[i].find_all(class_='AnchorLink') players = [link.text for link in anchor_links] players_by_temp.append(players) print(i)
进一步精简优化版
直接遍历html_table前20个元素,用嵌套列表推导式实现,运行效率更高:
players_by_temp = [ [link.text for link in table.find_all(class_='AnchorLink')] for table in html_table[:20] ]
额外提速建议
- 如果HTML本身是你动态请求获取的,可将单线程请求改为多线程/协程请求,大幅降低网络IO等待耗时
- 若后续还要解析同一页面的其他数据,可将解析后的DOM对象缓存,避免重复解析HTML内容
内容的提问来源于stack exchange,提问作者Mario
相关产品推荐
相关产品推荐

