绘制你的简书曲线

上次看到 彭小六大神 弄了个他自己的简书文章-关注数曲线,图如下

  • 觉得挺有意思,于是自己弄了个爬虫简陋版效果图如下。有需要的同学也可以自己试试,代码在下文,由于python程序封装为exe不太好用,所以就只给了源码。
  • 横坐标为日期,纵坐标为数量。第一行为喜欢和关注曲线,第二行是每日文章数散点图。蓝色是喜欢数红色是关注数绿色点为文章数。下图是一个喜欢关注单张,看得更清晰点。只是看下效果,请忽略我可怜的点赞关注数

  • 以下为代码,关于Scrapy安装参看新手向爬虫(三)别人的爬虫在干啥,还需要 matplotlib 和 seaborn库(样式美化)用于画图 ,使用 pip install matplotlibpip install seaborn安装。

  • Scrapy爬虫保存在num2.py文件中,需要将代码第6行的yourcookie变量改为你自己的remember_user_token获取:登录简书后,F12打开浏览器工具,点击network一栏,然后F5刷新,点击新出现的网络请求条目,就可以在headers的request headers中获得cookie,我们不需要所有的cookie(它们是以逗号分隔,=表示的字段),我们只需要其中的remember_user_token= xx那部分就可以。

  • 然后在命令行使用scrapy runspider num2.py -o 2.json运行爬虫,数据保存在2.json文件中,然后新建数据后处理文件x.pypython x.py后得到结果。

Scrapy爬虫

# -*- coding: utf-8 -*-
import scrapy
# Run
# scrapy runspider num2.py -o 2.json

yourcookie = 'xxxxxxxxx' # 由浏览器F12查看cookie获取remember_user_token这一小段

class Num1Spider(scrapy.Spider):
    name = "num2"
    allowed_domains = ["jianshu.com"]
    
    info_url = 'http://www.jianshu.com/notifications?all=true&page=%d'
    article_url = 'http://www.jianshu.com/users/66f24f2c0f36/latest_articles?page=%d'
    Cookie = {
            'remember_user_token' : yourcookie
            }
    
    headers = {
        "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
    }
    
    num = 0 # 页数

    def start_requests(self): # 默认的开始函数,用于提供要爬取的链接
        
        while self.num < 30: # 我的页数小于30,比较少,共花费1.991004秒
            self.num += 1
            yield scrapy.Request(self.info_url % self.num,
                             headers = self.headers,
                             cookies = self.Cookie,
                             callback = self.parse) # 爬取消息提醒页面
                             
            yield scrapy.Request(self.article_url % self.num,
                             headers = self.headers,
                             cookies = self.Cookie,
                             callback = self.article_parse) # 爬取最新文章页面
    
    def parse(self, response):
        time = response.css('li .time::text').extract()
        token = response.css('li span + i').extract()
        for t,k in zip(time, token):
            if 'fa-heart' in k:
                yield {'time': t, 'token': 'heart'}
            elif 'fa-check' in k:
                yield {'time': t, 'token': 'check'}
            else:
                pass
                # 统一数据产出格式为 {'time': t, 'token': 'x'}
    def article_parse(self, response):
        # from scrapy.shell import inspect_response
        # inspect_response(response, self)
        for t in response.css('.time::attr("data-shared-at")').extract():
            if not t : break
            yield {'time': t.replace('T', ' '), 'token': 'article'}

数据后处理

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import seaborn as sns 
#一旦导入了seaborn,matplotlib的默认作图风格就会被覆盖成seaborn的格式
import json
from collections import defaultdict
import datetime

like = defaultdict(int) # 生成整型默认字典,即字典键的默认值为0
focus = defaultdict(int)
article = defaultdict(int)

with open('2.json','r') as f: # 解析json,统计数据,即每天有多少喜欢,关注和文章
    data = json.load(f)
    for i in data:
        time = i['time'].split(' ')[0]
        if i['token'] == 'heart':
            like[time] += 1
        elif i['token'] == 'check':
            focus[time] += 1
        elif i['token'] == 'article':
            article[time] += 1

#datetime.datetime.strptime(x, '%Y-%m-%d')
for i,c in zip([like, focus, article], ['b-', 'r--', 'go']):
    i = sorted(i.items(), key = lambda x : x[0])  # 将字典变为列表并按日期排序
    x = [datetime.datetime.strptime(i[0],'%Y-%m-%d') for i in i] # 从字符串'2016-10-22'到datetime标准日期格式生成横轴
    y = [i[1] for i in i] # 生成纵轴
    plt.plot_date(x, y, c)

plt.savefig('2.jpg',dpi=300) # 保存图片,分辨率设置为尚可
plt.show()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容