python爬虫——爬取taptap游戏的评论信息(通过fiddler抓包)

时间:2024-03-22 13:37:35

1. 效果图,只抓取了评论人名字,游戏时长和评论内容,另外因为随机延迟,爬取的速度不是很快,有需要的爬友们可以写个多线程进行爬取

python爬虫——爬取taptap游戏的评论信息(通过fiddler抓包)

2. 通过抓包,分析之后我们可以找到评论区所在的url,对比之后我们可以发现该条url就是我们需要的url

python爬虫——爬取taptap游戏的评论信息(通过fiddler抓包)

3. 通过对比多条url,发现其中的规律,就是from递增10

python爬虫——爬取taptap游戏的评论信息(通过fiddler抓包)

4. 再分析返回的数据是json格式,通过对字典那样的操作,可以直接获取到我们需要的信息

python爬虫——爬取taptap游戏的评论信息(通过fiddler抓包)

5. 通过datas= resp.get(‘data’).get(‘list’)的datas是否为空来判断是否到底了,到底了咱们就break退出循环

resp = requests.get(url, headers=headers).json()
datas= resp.get('data').get('list')
if datas:
    for data in datas:
        # 评论人
        name = data.get('author').get('name')
        # 游戏时长
        played_tips = data.get('played_tips')
        # 评论内容
        contents = data.get('contents').get('text')

        # 声明一个字典储存数据
        data_dict = {}
        data_dict['name'] = name
        data_dict['played_tips'] = played_tips
        data_dict['contents'] = contents.replace('<br />', '')
        data_list.append(data_dict)

        print(data_dict)
else:
     break

6. 通过page自增10来达到翻页的效果,通过random随机函数来实现随机延迟

python爬虫——爬取taptap游戏的评论信息(通过fiddler抓包)

7. 完整代码附上

import requests
import json
import csv
import time
import random


headers = {
    'Host': 'api.taptapdada.com',
    'Connection': 'Keep-Alive',
    'Accept-Encoding': 'gzip',
    'User-Agent': 'okhttp/3.10.0'

}

# 声明一个列表存储字典
data_list = []


def start_spider():
    page = 0
    while True:
        time.sleep(round(random.uniform(0.5, 1.5), 1))
        url = 'https://api.taptapdada.com/review/v1/by-app?limit=10&app_id=142793' \
              '&X-UA=V%3D1%26PN%3DTapTap%26VN_CODE%3D551%26LOC%3DCN%26LANG%3Dzh_CN%26CH%3Dtencent%26' \
              'UID%3Dda4b99bf-5e2b-4204-a92f-235474b32c4c&from={}'.format(page)
        page += 10
        resp = requests.get(url, headers=headers).json()
        datas = resp.get('data').get('list')
        if datas:
            for data in datas:
                # 评论人
                name = data.get('author').get('name')
                # 游戏时长
                played_tips = data.get('played_tips')
                # 评论内容
                contents = data.get('contents').get('text')

                # 声明一个字典储存数据
                data_dict = {}
                data_dict['name'] = name
                data_dict['played_tips'] = played_tips
                data_dict['contents'] = contents.replace('<br />', '')
                data_list.append(data_dict)

                print(data_dict)
        else:
            break


def main():

    start_spider()
    # 将数据写入json文件
    with open('data_json.json', 'a+', encoding='utf-8-sig') as f:
        json.dump(data_list, f, ensure_ascii=False, indent=4)
    print('json文件写入完成')

    # 将数据写入csv文件
    with open('data_csv.csv', 'w', encoding='utf-8-sig', newline='') as f:
        # 表头
        title = data_list[0].keys()
        # 创建writer
        writer = csv.DictWriter(f, title)
        # 写入表头
        writer.writeheader()
        # 批量写入数据
        writer.writerows(data_list)
    print('csv文件写入完成')


if __name__ == '__main__':

    main()