评论抓取:Python爬取AppStore上的评论内容及星级,突破500条限制

本文介绍了一种爬取AppStore应用评论的方法,通过编写爬虫程序突破官方API限制,实现获取大量评论数据以满足数据分析需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前看到网上有AppStore应用评论的爬虫,但是由于用的是官方提供的api,每个应用最多只能获取到500条评论,完全没法满足数据分析的需求。因此经过一些分析,写了一个可以获取更多评论的爬虫。

1 配置文件(config_api.json)

{
  "max_page": 5,
  "ids": ["要爬app的id", "要爬app的id"],
  "headers": {
    "User-Agent": "你自己的",
    "Authorization": "你自己的"
  },
  "intervals": 2
}

 首先解释一下配置文件:

max_page:要爬的最大评论页数,每页是10条评论;

ids:要爬取的应用id列表;

headers:浏览器发起请求的请求头;

intervals:每爬一页评论的间隔时间。

2 代码(spider.py)

import os
import csv
import json
import time
import requests


next_url = None

review_path = 'reviews'
if not os.path.exists(review_path):
    os.mkdir(review_path)


with open('config_api.json', 'r') as file:
    config = json.loads(file.read())
    pending_queue = config['ids']
    max_page = config['max_page']
    headers = config['headers']
    intervals = config['intervals']


# 发送请求获取响应
def get_response(app_id, page):
    time.sleep(intervals)
    try:
        url = 'https://amp-api.apps.apple.com/v1/catalog/cn/apps/' + app_id +'/reviews?l=zh-Hans-CN&offset=' + str(page * 10) + '&platform=web&additionalPlatforms=appletv%2Cipad%2Ciphone%2Cmac'
        r = requests.get(url, headers=headers)
        r.raise_for_status()
        return r.json()
    except requests.exceptions.HTTPError:
        return 'HTTPError!'


# 解析响应
def parse_response(r):
    global next_url
    if "next" in r.keys():
        next_url = r['next']
    else:
        next_url = None

    for item in r['data']:
        yield {
            "id": item['id'],
            "type": item['type'],
            "title": item['attributes']['title'],
            "userName": item['attributes']['userName'],
            "isEdited": item['attributes']['isEdited'],
            "review": item['attributes']['review'],
            "rating": item['attributes']['rating'],
            "date":  item['attributes']['date']
        }


# 写入 csv 文件
def write_to_file(app_id, item):
    with open(f'{review_path}/{app_id}.csv', 'a', encoding='utf-8-sig', newline='') as csv_file:
        fieldnames = ['id', 'type', 'title', 'userName', 'isEdited', 'review', 'rating', 'date']
        writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
        writer.writerow(item)


# 主函数
def main():
    while len(pending_queue):
        cur_id = pending_queue.pop()
        print(f'开始爬取 {cur_id}')
        for i in range(0, max_page):
            r = get_response(cur_id, i)
            print(f"第 {i+1} 页评论已获取")
            for item in parse_response(r):
                write_to_file(cur_id, item)
            print(f'第 {i} 页评论已存储')
            if not next_url:
                break
        print(f'结束爬取 {cur_id}')


if __name__ == '__main__':
    main()

3 结果预览

 4 结语

有问题或者建议可以留言,如果对你有帮助的话,也可以关注我的公众号,谢谢。

编写一个爬取Steam游戏评论及其好评率的程序通常需要遵循几个步骤,这个过程可以分为以下几个部分: 1. **库的选择**:你需要Python的相关库如requests、BeautifulSoup、或者是Scrapy框架来发送HTTP请求获取网页内容,并解析HTML提取信息。 2. **API访问**:Steam并不直接提供公开的游戏评论API,你可以选择通过Web scraping的方式,直接访问游戏页面。然而,请注意遵守网站的robots.txt规则并尊重用户隐私。 3. **登录或模拟登录**:有些网站可能会要求用户登录才能查看所有评论,这时需要实现登录功能或者使用模拟登录技术(如Selenium)。 4. **提取评论**:使用BeautifulSoup或其他库解析HTML,找到包含评论的部分,提取每评论的文字以及其星级评分(通常好评率由平均分计算得出)。 5. **数据清洗**:去掉无关的HTML标签,整理成易于处理的数据结构,比如字典或列表。 6. **存储数据**:将收集到的数据保存到本地文件(CSV、JSON等),或者数据库(如SQLite或MySQL)中。 示例代码片段(简化版,实际操作需要更复杂的错误处理和网络抓取控制): ```python import requests from bs4 import BeautifulSoup def get_game_reviews(game_id): url = f"https://store.steampowered.com/app/{game_id}/reviews/" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") reviews = [] for review in soup.find_all('div', class_='review'): rating = float(review.find('span', class_='ui_starRating').text.strip()) comment = review.find('span', class_='reviewText').text reviews.append({'rating': rating, 'comment': comment}) return reviews # 示例 reviews = get_game_reviews('your_game_id') good_ratings = [r for r in reviews if r['rating'] >= 4] # 好评率过滤 avg_rate = sum(r['rating'] for r in good_ratings) / len(good_ratings) print("好评率:", avg_rate) for review in good_ratings: print(f"评论内容: {review['comment']}")
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值