从当当客户端api抓取书评到词云生成

看了好几本大冰的书,感觉对自己的思维有不少的影响。想看看其他读者的评论。便想从当当下手抓取他们评论做个词云。
想着网页版说不定有麻烦的反爬,干脆从手机客户端下手好了。
果其不然,找到一个书评的api。发送请求就有详情的json返回,简直不要太方便...

要是对手机客户端做信息爬取,建议安装一个手机模拟器。

思路:

在安装好的手机模拟器设置好用来抓包的代理,我用的charles。记得安装证书,不然抓不了https的数据包。

然后安装当当客户端,打开进到书评页面。

然后成功在charles找到了这个接口。发送get请求就会返回书评...

然后这个接口只有page参数需要注意下,代表请求的第几页。然后其他参数我照抄过来了。

当当边好像没有对这些参数做检验,用很久之前抓的的链接的参数还是能请求到数据...

之后就是请求链接在脚本里解析返回的json就好了,我只需要评论,十几行代码就行。

如果要抓其他书的书评应该修改参数product_id就好。

爬虫代码:

import requests
import json
import random
import time

url=‘http://api.dangdang.com/community/mobile/get_product_comment_list?access-token=&product_id=25288851&time_code=ae4074539cd0bf4ad526785a9439d756&tc=0cdfe66abc1ef55674c1ca8f815414b0&client_version=8.10.0&source_page=&action=get_product_comment_list&ct=android&union_id=537-100893&timestamp=1540121525&permanent_id=20181021192526739954846678302543739&custSize=b&global_province_id=111&cv=8.10.0&sort_type=1&product_medium=0&page_size=15&filter_type=1&udid=c3b0e748134cbd9612e3e8b6a7e52952&main_product_id=&user_client=android&label_id=&page=‘
headers={
‘User-Agent‘:‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36‘
}
def getComments(url, page):
    url = url+str(page)  #url拼接,为了获取指定页的评论
    html = requests.get(url=url,headers=headers)
    res = json.loads(html.text)
    result = res.get(‘review_list‘)  #从字典中获取key为review_list的值,这与当当返回的数据结构有关
    comments = []
    for comment in result:
        comments.append(comment[‘content‘])  #评论正文
        try:
            with open(‘comments.txt‘,‘a‘,encoding=‘utf-8‘) as f:
                f.write(comment[‘content‘]+‘\n‘)  #写入文本中,免不了编码错误,加个try算了
        except:
            print(‘第‘+str(page)+‘页出错‘)
            continue
for i in range(1,100):  #爬100页的评论
    time.sleep(random.choice([1,2,3]))  #每次循环强制停1~3秒,控制下频率...
    getComments(url,i)

词云生成,先使用jieba分词对爬到的评论进行分词。

记得分词后要用停用词表将一些没有什么意义的字符删去,比如标点符号,各种人称代词等等...

最后用pyecharts生成词云。

词云生成代码:

import jieba
from pyecharts import options as opts
from pyecharts.charts import Page, WordCloud
from pyecharts.globals import SymbolType

#添加自定义的分词
jieba.add_word(‘你坏‘)
jieba.add_word(‘大冰‘)
jieba.add_word(‘江湖‘)

#文本的名称
text_path=‘comments.txt‘
#一些词要去除,停用词表
stopwords_path=‘stopwords.txt‘

#读取要分析的文本
words_file = open(text_path,‘r‘,encoding=‘utf-8‘)
text = words_file.read()

def jiebaClearText(text):

    #分词,返回迭代器
    seg_iter = jieba.cut(text,cut_all=False)
    listStr = list(seg_iter)

    res = {}
    #这个循环用来记录词频
    for i in listStr:
        if i in res:
            res[i] += 1
        else:
            res[i.strip()] = 1
    try:
        #读取停用表
        f_stop = open(stopwords_path,encoding=‘utf-8‘)
        f_stop_text = f_stop.read()
    finally:
        f_stop.close()
    #以换行符分开文本,因为每个停用词占一行。返回停用词列表
    f_stop_seg_list = f_stop_text.split(‘\n‘)
    #这个循环用来删除评论出现在停用词表的词
    for i in f_stop_seg_list:
        if i in res:
            del res[i]

    words = []
    for k,v in res.items():
        words.append((k,v))
    #words的元素是(词,词出现的次数)
    #下面是以出现的次数将words排序
    words.sort(key=lambda x:x[1],reverse=True)
    return words

words = jiebaClearText(text)
words_file.close()  # 关闭一开始打开的文件
print(words)
#词云生成,用到pyecharts,各参数的含义请到官方文档查看...
worldcloud=(
    WordCloud().add("", words[:60], word_size_range=[10, 100],rotate_step=0, shape=‘triangle‘ ).set_global_opts(title_opts=opts.TitleOpts(title="《你坏》"))
    )
worldcloud.render(‘result.html‘)  #保存成html文件

结果:

词云:

最后,可以看到,其实书评里有很多带正向感情色彩的评论。

内容还是很正能量的哈哈,每天看一遍,赶走抑郁~

所以,容我也向您安利一下大冰的书哈哈。

The End~

原文地址:https://www.cnblogs.com/byadmin/p/11675126.html

时间: 2024-09-27 08:26:44

从当当客户端api抓取书评到词云生成的相关文章

百度音乐API抓取

百度音乐API抓取 前段时间做了一个本地音乐的播放器 github地址,想实现在线播放的功能,于是到处寻找API,很遗憾,不是歌曲不全就是质量不高.在网上发现这么一个APIMRASONG博客,有“获取榜单,搜索歌词,下载地址,专辑”信息等等接口. 后来发现有些接口使用起来不是很方便,比如获取专辑信息,只能得到歌曲列表的id信息,所以自己决定用fiddler来对百度音乐安卓客户端抓包. 下面是一系列的接口: 一. 关键词建议: GET: http://tingapi.ting.baidu.com/

Office365 Graph API 抓取OneDrive/Sharepoint文件信息

1,使用全局管理员登录Office365 Azure AD注册Graph API应用,具体参考官网链接https://docs.microsoft.com/zh-cn/graph/auth-register-app-v22,在API权限添加委托应用---以下权限实际上没什么用处,需要将运行graph api的账号添加为被读取Onedrive站点的管理员Sites.Read.AllSites.ReadWrite.AllSites.Search.AllUser.Read.All2.1 设置OneDr

百度地图api抓取坐标实例

<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>百度地图API的使用</title> <!-- 百度地图API--> <script src="http://api.map.baidu.com/api?v=1.2" type="text/javascript"></scri

通过调用Twitter API抓取Twitter数据

国内研究weibo的人比较多,资料也相对较多,但是twitter的资料相对较少.今天简单说一下twitter api的使用.最近一小需求,采集含有指定关键词的twitter数据,瞬间想到写个爬虫来抓取,后来突然想到twitter应该有open api可用.使用了vpn翻墙之后简单的了解了twitter.com,决定直接使用 twitter api.由于twitter的open api现在也是基于oauth协议的,因此使用流程和国内一些社区比如说人人网,weibo的api的过程类似. 要想使用tw

Scrapy抓取有关房屋租售信息并生成手机App(一)

先记录下我用scrapy做的一个小例子. 使用的软件版本:python 2.7.11, scrapy 1.0.5 1. Scrapy通常所使用操作过程:UR2IM 即URL, Request, Response, Items, More URLs. 可以用下面这张图简单的解释: 从最初的一个URL发出请求,在得到的Response里面获得需要抓取的信息和获得更多需要抓取的URL,然后将抓取到的信息进行保存并开始更多的抓取工作. 2. Scrapy shell Scrapy shell 是非常有用

Scrapy抓取有关房屋租售信息并生成手机App(二)

由上一节中爬虫程序已经在scrapy中定义完成,我们准备生成app. 目前生成app的软件颇多,这里我们需要以数据库驱动,选择了appery.io. 1. 生成数据库 注册完成之后,先在database选项卡中添加一行新用户,名为root.随后添加新的数据库名为scrapy和新的collections名为properties. 完成即可见: 随后在collections中添加所需要的数据库字段: 属性都先选择string.数据库定义完成. 2. 接收数据 是的appery接收我们爬虫的数据需要A

selenium爬取新闻做成词云(以及selenium的xpath查找方法)

一开始是想用qq空间说说做词云的,然而qq空间需要用cookies以及其他加密的东西,退而求其次搞搞新闻吧. 直接上代码了 # -*-coding:utf-8 -*- from selenium import webdriver import wordcloud #词云制作器 import jieba#强大的中文分词库 from scipy.misc import imread#读取图片 import time url='https://news.nuist.edu.cn/main.htm' n

一站式学习Wireshark(八):应用Wireshark过滤条件抓取特定数据流

应用抓包过滤,选择Capture | Options,扩展窗口查看到Capture Filter栏.双击选定的接口,如下图所示,弹出Edit Interface Settints窗口. 下图显示了Edit Interface Settings窗口,这里可以设置抓包过滤条件.如果你确知抓包过滤条件的语法,直接在Capture Filter区域输入.在输入错误时,Wireshark通过红色背景区域表明无法处理过滤条件.最有可能的情况是,过滤条件中含有输入错误,或是使用了display filter的

抓取网易云音乐歌曲热门评论生成词云

前言 抓数据 抓包分析 加密信息处理 抓取热门评论内容 词云 词云运行效果 总结 前言 网易云音乐一直是我向往的"神坛",听音乐看到走心的评论的那一刻,高山流水.于是今天来抓取一下歌曲的热门评论.并做成词云来展示,看看相对于这首歌最让人有感受的评论内容是什么. 做成词云的好处就是直观以及美观, 其他的我也想不出来有什么了. 抓数据 要想做成词云,首先得有数据才行.于是需要一点点的爬虫技巧. 抓包分析 加密信息处理 抓取热门评论内容 抓包分析 使用Chrome控制台.我们可以轻松的找到评