taptap评论爬虫
爬虫
- taptap评论爬虫
- 1、下载fidder
- 1.1、官方下载
- 1.2、fidder使用
- 1.3、获取并复制保存url
- 2、评论爬虫和保存
- 2.1、评论清洗
taptap评论爬虫
1、下载fidder
1.1、官方下载
官网下载链接: fidder.
1.2、fidder使用
使用fidder获取url: b站视频.
1.3、获取并复制保存url
2、评论爬虫和保存
2.1、爬虫的代码
import requests
import os
import re
import random
import time
import csv# 请求头
HEADERS = {'Host': 'api.taptapdada.com','Connection': 'Keep-Alive','Accept-Encoding': 'gzip','User-Agent': 'okhttp/3.10.0'}
# 基础页面 每个页面有10条评论,'from'参数表示评论序号,从0开始,每+10翻页一次
BASE_URL = 'https://api.taptapdada.com/review/v1/by-app?sort=new&app_id={}' \'&X-UA=V%3D1%26PN%3DTapTap%26VN_CODE%3D593%26LOC%3DCN%26LANG%3Dzh_CN%26CH%3Ddefault' \'%26UID%3D8a5b2b39-ad33-40f3-8634-eef5dcba01e4%26VID%3D7595643&from={}'
# 保存断点的文件
STOP_POINT_FILE = 'stop_point.txt'class TapSpiderByRequests:def __init__(self, csv_save_path, game_id):"""获取断点,激活爬虫"""# 获取断点self.start_from = self.resume()# 重置保存评论的列表self.reviews = []# 运行爬虫self.spider(csv_save_path, game_id)def spider(self, csv_save_path, game_id):"""发送请求,验证访问状态:return: 网页返回的json数据"""end_from = self.start_from + 300# 循环爬取30页for i in range(self.start_from, end_from+1, 10):url = BASE_URL.format(game_id, i)try:resp = requests.get(url, headers=HEADERS).json()resp = resp.get('data').get('list')self.parse_info(resp)print('=============已爬取第 %d 页=============' % int(i/10))# 等待0至2秒,爬下一页if i != end_from:print('爬虫等待中...')pause = random.uniform(0, 2)time.sleep(pause)print('等待完成,准备翻页。')# 顺利爬至末页,则保存断点else:with open(STOP_POINT_FILE, 'w') as f:f.write(str(i+10))# 出错,则中断爬虫,保存断点except Exception as error:with open(STOP_POINT_FILE, 'w') as f:f.write(str(i))# 打印异常信息print('爬取第%i页出现异常,断点已保存,异常信息如下:' % int(i/10))raise error# 退出程序exit()# 将信息写入csvself.write_csv(csv_save_path, self.reviews)def parse_info(self, resp):""":param resp: 本页返回的json数据:return: 将本页评论信息追加至REVIEWS列表"""for r in resp:review = {}# idreview['id'] = r.get('id')# 昵称review['author'] = r.get('author').get('name').encode('gbk', 'ignore').decode('gbk')# 评论时间review['updated_time'] = r.get('updated_time')# 设备review['device'] = r.get('device').encode('gbk', 'ignore').decode('gbk')# 游玩时长(分钟)review['spent'] = r.get('spent')# 打分review['stars'] = r.get('score')# 评论内容content = r.get('contents').get('text').strip()review['contents'] = re.sub('<br />| ', '', content).encode('gbk', 'ignore').decode('gbk')# 支持度review['ups'] = r.get('ups')# 不支持度review['downs'] = r.get('downs')self.reviews.append(review)# 断点续传def resume(self):"""爬取出错时,将出错url的‘from’参数值保存至txt中,中断爬虫。再次运行爬虫程序后,从此页继续爬取:return: 本次续连url的‘from’参数值"""start_from = 0if os.path.exists(STOP_POINT_FILE):with open(STOP_POINT_FILE, 'r') as f:start_from = int(f.readline())return start_from# 追加写入csvdef write_csv(self, full_path, reviews):""":param full_path: csv保存的完整路径:param reviews: 列表形式的评论信息"""title = reviews[0].keys()path, file_name = os.path.split(full_path)if os.path.exists(full_path):with open(full_path, 'a+', newline='', encoding='utf-8-sig') as f:writer = csv.DictWriter(f, title)writer.writerows(reviews)else:try:os.mkdir(path)except Exception:print('路径已存在,或未获得建立路径的权限。请检查路径是否存在,或手动建立路径。')with open(full_path, 'a+', newline='', encoding='utf-8-sig') as f:writer = csv.DictWriter(f, title)writer.writeheader()writer.writerows(reviews)if __name__ == '__main__':# csv保存路径csv_save_path = r'G:\设计\taptap\原神评论.csv'# 游戏idgame_id = 168332# 循环爬取至990页for i in range(33):TapSpiderByRequests(csv_save_path, game_id)
2.1、评论清洗
# coding=gbk
import pandas as pd
import time
import re
import numpy as np# 爬虫获取的数据的所在路径
csv_path = r'G:\设计\taptap\原神评论.csv'
# 清洗后的数据的保存路径
clean_path = r'G:\设计\taptap\原神评论清洗.csv'# 读取数据
data = pd.read_csv(csv_path, header=0, index_col='id')# # 查看前20条数据和列名
# print(data[:20])
# print(data.columns)# 将评论时间由时间戳转日期
data['updated_time'] = data['updated_time'].apply(lambda x: time.strftime('%Y-%m-%d', time.localtime(x)))
# 评论净支持数
data['net_support'] = data['ups'] - data['downs']
# 评论热度
data['heat'] = data['ups'] + data['downs']
data['heat'] = (data['heat'] - data['heat'].min()) / (data['heat'].max() - data['heat'].min())
# 评分
data['score'] = data['stars']*2# 将游玩时间为0的标注为缺失值
data['spent'] = data['spent'].replace(0, np.nan)# 清除无意义字符
data['contents'] = data['contents'].apply(lambda x: re.sub('&[\w]+;', '', str(x)))
data['contents'] = data['contents'].apply(lambda x: re.sub('\(\s*\)', '', str(x)))
# 删除用不上的列
data.drop(['ups', 'downs'], axis=1, inplace=True)
# 保存数据,转换成utf-8编码
data.to_csv(clean_path, encoding='utf_8_sig')
taptap评论爬虫相关推荐
- TapTap 评论爬取、分类和基于 Attention 的可视化
项目地址 https://github.com/AsherLeeML/TapTapCommentSpider 结构: -- `cache` //存放中间缓存文件.做完全套占空间其实还挺多的,扒下来60 ...
- python携程酒店评论_携程酒店评论爬虫心得
携程酒店评论爬虫心得 发布时间:2018-09-02 15:58, 浏览次数:613 携程酒店评论爬虫心得 这次爬取数据,遇到了不少的困难,也走了很多弯路,特此写下帮助记忆.以下基本是我爬取数据的过程 ...
- JD京东爬虫-商品评论爬虫-----附源码
JD京东爬虫-商品评论爬虫 附源码 本教程适合初学者. 分析开始--------------- 打开京东商品链接,打开抓包工具(加载网页后打开抓包工具,发现没有抓到数据包,刷新网页就行),这边直接筛选 ...
- 携程逆向爬虫 | PC网页端 | 旅游景点评论爬虫
目录 导语 1. 获取所有城市_id 2. 分析评论信息位置 3. 获取当前市 景点页数 4.获取当前景点的评论页数 5. 总体爬虫效果 6. 注意 导语 自携程更新后,这是全网首篇,关于新版携程的逆 ...
- 简单的网易云音乐热门评论爬虫
简单的网易云音乐热门评论爬虫 注:本文没有什么技术含量,就是一个普通的AJAX数据爬虫,适合新手练习 目标:爬取网易云音乐歌曲的热门评论 分析:本次爬虫不难,思路是请求和获取数据,网易云音乐的评论是通 ...
- 腾讯视频评论爬虫实战
文章目录 腾讯视频评论爬虫实战(深度长评) 腾讯视频评论爬虫实战(短评) 腾讯视频评论爬虫实战(深度长评) 程序文件:xajh_cp.py 结果保存:./tencent_comment/xajh_cp ...
- 携程酒店评论爬虫心得
携程酒店评论爬虫心得 这次爬取数据,遇到了不少的困难,也走了很多弯路,特此写下帮助记忆.以下基本是我爬取数据的过程,前半段是弯路,可直接绕过,后半段是解决方法. 打开携程,南京YMCA酒店页面,可以发 ...
- 哪吒之魔童降世——豆瓣电影评论爬虫
@TOC哪吒之魔童降世--豆瓣电影评论爬虫 学校里的一个小作业,写个影评分析,网上搜了下资料,总结了一下,顺便修改了修改代码,亲自实测了下,因为需要登录才能爬取,所以设定了些模拟登陆,但是即使登录之后 ...
- Python 网易云音乐评论爬虫
引言 之前网易云音乐和农夫山泉合作,将热门评论印在农夫山泉上引爆了朋友圈.于是想爬取一下网易云的评论.网上搜了一下,对于网易云评论的爬虫不少,主要参考这篇文章:对网易云音乐参数(params,encS ...
- 最新的B站弹幕和评论爬虫,你们要的冰冰来啦!
作者 | 周萝卜 来源 | 萝卜大杂烩 最近想爬下B站的弹幕和评论,发现网上找到的教程基本都失效了,毕竟爬虫和反爬是属于魔高一尺.道高一丈的双方,程序员小哥哥们在网络的两端斗智斗勇,也是精彩纷呈. 当 ...
最新文章
- matlab图像处理命令(二)
- Oauth2认证以及新浪微博开放平台应用
- Android开发——异步任务中Activity销毁时的问题
- 中国大学MOOC 人工智能导论第一章测试
- 【LeetCode笔记】剑指 Offer 61-. 扑克牌中的顺子 (Java、哈希表)
- android view显示隐藏动画效果,Android 根据手势顶部View自动展示与隐藏效果
- 移动端页面开发通用问题解决方案
- 多区域OSPF基本配置
- c语言鸡蛙问题用while,C语言第3章课件.ppt
- 使用Pyecharts进行全国水质TDS地图可视化全过程8:绘制中国地图,使用timeline把多个值放在一个地图上
- Storm启动报错Internal Server Error
- unity 获取设备的GPS信息
- ZooKeeper安装教程
- 韶音骨传导耳机怎么样?韶音与南卡骨传导哪款更好
- 中国头孢菌素药物行业市场供需与战略研究报告
- 数字电路的竞争与冒险
- 水生植物的Java莫斯
- 扶桑号战列舰(单调栈)
- UML各种模板图型汇总大全,教你轻松画!
- 看微信如何往你的朋友圈里投广告?微信广告团队李昊在微信公开课演讲实录...
热门文章
- 调用百度API 实现车型识别
- word稿件转化 成html格式后 图片很模糊是什么原因,你保存的word和pdf文档图片为什么变模糊了?...
- 苹果手机语音备忘录在哪_苹果手机的备忘录竟然还有这么多隐藏功能?以前不知道真是可惜了!...
- linux限制syslog大小,c – 如何限制syslog管理的日志文件的总大小?
- ico图标制作的在线工具
- my live work / interview / renshebu / gongxinbu
- 进出口流程 报关单据
- React 18 新特性-入门教程
- PPT自动添加进度条与页码
- java 数据抓取 动态获得cookies里变动的属性_Java爬取CSDN博客遇到setCookie问题