You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

优化App Store Scraper遍历国家代码时的性能问题

优化App Store播客评论爬取速度:跳过无评论国家的重试

我用App Store Scraper爬取苹果播客评论时,遍历全国家代码列表遇到了速度瓶颈——无评论的国家会触发库默认的20次重试,导致整体耗时过长。try-except无法提前终止重试,因为重试逻辑是库内部实现的。下面提供两种可行的优化方案:

方案一:修改库的默认重试次数(快速解决)

App Store Scraper的Base类默认设置了retries=20,我们可以通过猴子补丁全局修改重试次数,让首次请求失败后直接跳过,无需等待多次重试。

from app_store_scraper import Podcast
from app_store_scraper.base import Base

# 将默认重试次数改为1(首次失败即停止)
Base.retries = 1

# 原有遍历逻辑
app_id = 1614435903
app_name = '28ish-days-later'
countries = ["DZ", "AO", "AI",
"AR", "AM", "AU",
"AT", "AZ", "BH",
"BB", "BY", "BE",
"BZ", "BM", "BO",
"BW", "BR", "VG",
"BN", "BG", "CA",
"KY", "CL", "CN",
"CO", "CR", "HR",
"CY", "CZ", "DK",
"DM", "EC", "EG",
"SV", "EE", "FI",
"FR", "DE", "GH",
"GB", "GR", "GD",
"GT", "GY", "HN",
"HK", "HU", "IS",
"IN", "ID", "IE",
"IL", "IT", "JM",
"JP", "JO", "KE",
"KW", "LV", "LB",
"LT", "LU", "MO",
"MG", "MY", "ML",
"MT", "MU", "MX",
"MS", "NP", "NL",
"NZ", "NI", "NE",
"NG", "NO", "OM",
"PK", "PA", "PY",
"PE", "PH", "PL",
"PT", "QA", "MK",
"RO", "RU", "SA",
"SN", "SG", "SK",
"SI", "ZA", "KR",
"ES", "LK", "SR",
"SE", "CH", "TW",
"TZ", "TH", "TN",
"TR", "UG", "UA",
"AE", "US", "UY",
"UZ", "VE", "VN",
"YE"]

for c in countries:
    sysk = Podcast(country=c, app_name=app_name, app_id=app_id)
    try:
        sysk.review()
        print(f"No. of reviews found for country {c}: {sysk.reviews_count}")
        # 这里可添加评论保存逻辑
    except Exception as e:
        print(f"Skip country {c}: {str(e)}")

说明:如果希望完全不重试,可将Base.retries设为0。此方法无需修改库源码,全局生效,能直接减少无评论国家的等待时间。

方案二:预筛选有评论的国家(更稳妥)

先对所有国家发起一次仅请求1条评论的快速检测,筛选出有评论的国家后,再遍历精简列表爬取全量评论,彻底跳过无评论国家的请求消耗。

from app_store_scraper import Podcast

app_id = 1614435903
app_name = '28ish-days-later'
all_countries = ["DZ", "AO", "AI",
"AR", "AM", "AU",
"AT", "AZ", "BH",
"BB", "BY", "BE",
"BZ", "BM", "BO",
"BW", "BR", "VG",
"BN", "BG", "CA",
"KY", "CL", "CN",
"CO", "CR", "HR",
"CY", "CZ", "DK",
"DM", "EC", "EG",
"SV", "EE", "FI",
"FR", "DE", "GH",
"GB", "GR", "GD",
"GT", "GY", "HN",
"HK", "HU", "IS",
"IN", "ID", "IE",
"IL", "IT", "JM",
"JP", "JO", "KE",
"KW", "LV", "LB",
"LT", "LU", "MO",
"MG", "MY", "ML",
"MT", "MU", "MX",
"MS", "NP", "NL",
"NZ", "NI", "NE",
"NG", "NO", "OM",
"PK", "PA", "PY",
"PE", "PH", "PL",
"PT", "QA", "MK",
"RO", "RU", "SA",
"SN", "SG", "SK",
"SI", "ZA", "KR",
"ES", "LK", "SR",
"SE", "CH", "TW",
"TZ", "TH", "TN",
"TR", "UG", "UA",
"AE", "US", "UY",
"UZ", "VE", "VN",
"YE"]
valid_countries = []

# 第一步:预筛选有评论的国家
for c in all_countries:
    try:
        sysk = Podcast(country=c, app_name=app_name, app_id=app_id)
        sysk.review(how_many=1)  # 仅请求1条评论,快速验证
        if sysk.reviews_count > 0:
            valid_countries.append(c)
            print(f"Country {c} has reviews, added to valid list")
        else:
            print(f"Country {c} has no reviews, skipped")
    except Exception as e:
        print(f"Country {c} request failed, skipped: {str(e)}")

print(f"Total valid countries with reviews: {len(valid_countries)}")

# 第二步:遍历有效国家爬取全量评论
path_out = "podcast_reviews"
filename_csv = f'{app_name}_reviews_table.csv'
file_csv = f"{path_out}/{filename_csv}"  # 修正路径拼接逻辑

for c in valid_countries:
    sysk = Podcast(country=c, app_name=app_name, app_id=app_id)
    sysk.review()  # 爬取全部评论
    print(f"Fetched {sysk.reviews_count} reviews for country {c}")
    # 示例:用pandas保存评论到CSV
    # import pandas as pd
    # df = pd.DataFrame(sysk.reviews)
    # df.to_csv(file_csv, mode='a', header=False, index=False)

说明:预筛选阶段请求量极小,速度极快;筛选后仅处理有评论的国家,完全避免了无评论国家的重试等待。建议结合方案一的重试次数修改,进一步提升预筛选效率。


内容的提问来源于stack exchange,提问作者OnceUponATime

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 19:45:55