爬虫

  • 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 />|&nbsp', '', 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评论爬虫相关推荐

  1. TapTap 评论爬取、分类和基于 Attention 的可视化

    项目地址 https://github.com/AsherLeeML/TapTapCommentSpider 结构: -- `cache` //存放中间缓存文件.做完全套占空间其实还挺多的,扒下来60 ...

  2. python携程酒店评论_携程酒店评论爬虫心得

    携程酒店评论爬虫心得 发布时间:2018-09-02 15:58, 浏览次数:613 携程酒店评论爬虫心得 这次爬取数据,遇到了不少的困难,也走了很多弯路,特此写下帮助记忆.以下基本是我爬取数据的过程 ...

  3. JD京东爬虫-商品评论爬虫-----附源码

    JD京东爬虫-商品评论爬虫 附源码 本教程适合初学者. 分析开始--------------- 打开京东商品链接,打开抓包工具(加载网页后打开抓包工具,发现没有抓到数据包,刷新网页就行),这边直接筛选 ...

  4. 携程逆向爬虫 | PC网页端 | 旅游景点评论爬虫

    目录 导语 1. 获取所有城市_id 2. 分析评论信息位置 3. 获取当前市 景点页数 4.获取当前景点的评论页数 5. 总体爬虫效果 6. 注意 导语 自携程更新后,这是全网首篇,关于新版携程的逆 ...

  5. 简单的网易云音乐热门评论爬虫

    简单的网易云音乐热门评论爬虫 注:本文没有什么技术含量,就是一个普通的AJAX数据爬虫,适合新手练习 目标:爬取网易云音乐歌曲的热门评论 分析:本次爬虫不难,思路是请求和获取数据,网易云音乐的评论是通 ...

  6. 腾讯视频评论爬虫实战

    文章目录 腾讯视频评论爬虫实战(深度长评) 腾讯视频评论爬虫实战(短评) 腾讯视频评论爬虫实战(深度长评) 程序文件:xajh_cp.py 结果保存:./tencent_comment/xajh_cp ...

  7. 携程酒店评论爬虫心得

    携程酒店评论爬虫心得 这次爬取数据,遇到了不少的困难,也走了很多弯路,特此写下帮助记忆.以下基本是我爬取数据的过程,前半段是弯路,可直接绕过,后半段是解决方法. 打开携程,南京YMCA酒店页面,可以发 ...

  8. 哪吒之魔童降世——豆瓣电影评论爬虫

    @TOC哪吒之魔童降世--豆瓣电影评论爬虫 学校里的一个小作业,写个影评分析,网上搜了下资料,总结了一下,顺便修改了修改代码,亲自实测了下,因为需要登录才能爬取,所以设定了些模拟登陆,但是即使登录之后 ...

  9. Python 网易云音乐评论爬虫

    引言 之前网易云音乐和农夫山泉合作,将热门评论印在农夫山泉上引爆了朋友圈.于是想爬取一下网易云的评论.网上搜了一下,对于网易云评论的爬虫不少,主要参考这篇文章:对网易云音乐参数(params,encS ...

  10. 最新的B站弹幕和评论爬虫,你们要的冰冰来啦!

    作者 | 周萝卜 来源 | 萝卜大杂烩 最近想爬下B站的弹幕和评论,发现网上找到的教程基本都失效了,毕竟爬虫和反爬是属于魔高一尺.道高一丈的双方,程序员小哥哥们在网络的两端斗智斗勇,也是精彩纷呈. 当 ...

最新文章

  1. matlab图像处理命令(二)
  2. Oauth2认证以及新浪微博开放平台应用
  3. Android开发——异步任务中Activity销毁时的问题
  4. 中国大学MOOC 人工智能导论第一章测试
  5. 【LeetCode笔记】剑指 Offer 61-. 扑克牌中的顺子 (Java、哈希表)
  6. android view显示隐藏动画效果,Android 根据手势顶部View自动展示与隐藏效果
  7. 移动端页面开发通用问题解决方案
  8. 多区域OSPF基本配置
  9. c语言鸡蛙问题用while,C语言第3章课件.ppt
  10. 使用Pyecharts进行全国水质TDS地图可视化全过程8:绘制中国地图,使用timeline把多个值放在一个地图上
  11. Storm启动报错Internal Server Error
  12. unity 获取设备的GPS信息
  13. ZooKeeper安装教程
  14. 韶音骨传导耳机怎么样?韶音与南卡骨传导哪款更好
  15. 中国头孢菌素药物行业市场供需与战略研究报告
  16. 数字电路的竞争与冒险
  17. 水生植物的Java莫斯
  18. 扶桑号战列舰(单调栈)
  19. UML各种模板图型汇总大全,教你轻松画!
  20. 看微信如何往你的朋友圈里投广告?微信广告团队李昊在微信公开课演讲实录...

热门文章

  1. 调用百度API 实现车型识别
  2. word稿件转化 成html格式后 图片很模糊是什么原因,你保存的word和pdf文档图片为什么变模糊了?...
  3. 苹果手机语音备忘录在哪_苹果手机的备忘录竟然还有这么多隐藏功能?以前不知道真是可惜了!...
  4. linux限制syslog大小,c – 如何限制syslog管理的日志文件的总大小?
  5. ico图标制作的在线工具
  6. my live work / interview / renshebu / gongxinbu
  7. 进出口流程 报关单据
  8. React 18 新特性-入门教程
  9. PPT自动添加进度条与页码
  10. java 数据抓取 动态获得cookies里变动的属性_Java爬取CSDN博客遇到setCookie问题