python爬虫-36kr网+Django+Echarts图表

一.爬虫作业:抓取36kr网站数据

爬虫代码和数据sql脚本在下方链接,抓取过程主要是抓包找到url递归解析的规律,三个主要的函数 以及 表结构脚本如下

#建表语句(写爬虫时候忘记添加user_url 后续数据处理时候update补全了这个字段)
CREATE TABLE `36kr` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `column_id` varchar(255) DEFAULT NULL COMMENT '专题id',
  `tag` varchar(255) DEFAULT NULL COMMENT '专题名',
  `b_id` varchar(255) DEFAULT NULL COMMENT '文章id',
  `article_url` varchar(255) DEFAULT NULL COMMENT '文章url',
  `title` varchar(255) DEFAULT NULL COMMENT '标题',
  `user_id` varchar(255) DEFAULT NULL COMMENT '用户id',
  `user_name` varchar(255) DEFAULT NULL COMMENT '用户名',
  `total_words` varchar(255) DEFAULT NULL COMMENT '文章总字数',
  `close_comment` varchar(255) DEFAULT NULL COMMENT '关闭评论数',
  `favorite` varchar(255) DEFAULT NULL COMMENT '收藏数',
  `likes` varchar(255) DEFAULT NULL COMMENT '赞数',
  `pv` varchar(255) DEFAULT NULL COMMENT 'pv浏览量',
  `pv_app` varchar(255) DEFAULT NULL COMMENT 'app浏览量',
  `pv_mobile` varchar(255) DEFAULT NULL COMMENT '手机端浏览量',
  `view_count` varchar(255) DEFAULT NULL COMMENT '观看次数统计',
  `extraction_tags` text COMMENT '文章标签',
  `summary` text COMMENT '摘要',
  `title_mobile` text COMMENT '手机端标题',
  `introduction` varchar(255) DEFAULT NULL COMMENT '简介',
  `published_at` varchar(255) DEFAULT NULL COMMENT '发表时间',
  `created_at` varchar(255) DEFAULT NULL COMMENT '创建时间',
  `updated_at` varchar(255) DEFAULT NULL COMMENT '更新时间',
  `related_company_id` varchar(255) DEFAULT NULL COMMENT '公司id',
  `related_company_type` varchar(255) DEFAULT NULL COMMENT '公司类型',
  `related_company_name` varchar(255) DEFAULT NULL COMMENT '公司名称',
  `full_url` varchar(255) DEFAULT NULL COMMENT '请求url',
  `user_url` varchar(50) DEFAULT NULL COMMENT '用户url',,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=29045 DEFAULT CHARSET=utf8;

爬虫核心三个函数 人工构造导航栏(字段tag)的 column_ids和 column_names列表 进行字典映射 请求数据后将导航栏数据写入数据库,第一次请求url只有column_id动态 per_page参数写死=1

    #第一次请求解析出后续的请求url
    def parse_column(self):
        column_ids = self.column_ids_dict['column_ids']
        print(column_ids, self.column_dict)
        for column_id in column_ids:
            self.parse_first_req(column_id)
    #第一次请求url只有column_id动态 per_page参数写死=1
    def parse_first_req(self, column_id):
        first_url = self.start_url.format(column_id)
        print(first_url)
        html = requests.get(first_url).text
        items = json.loads(html)['data']['items']
        if items:
            last_b_id = items[-1]['id']
            full_url = self.base_url.format(column_id, last_b_id)
            print('解析导航栏:%s-->首页,id-->%s' % (self.column_dict[column_id], column_id))
            self.parse_json(full_url)
        else:
            pass
    #解析 http://36kr.com/api/post?column_id=23&b_id=5070043&per_page=100 数据网为100个item循环遍历
    def parse_json(self, full_url):
        print("解析组合url--->", full_url)
        self.req_urls.append(full_url)
        html = requests.get(full_url).text
        items = json.loads(html)['data']['items']
        if items:
            for item in items:
                parse_item = item
                parse_item['tag'] = self.column_dict[item['column_id']]
                parse_item['full_url'] = full_url
                self.insert_item(parse_item)
            last_b_id = items[-1]['id']
            column_id = items[-1]['column_id']
            next_req_url = self.base_url.format(column_id, last_b_id)
            print('下一次请求url-->', next_req_url)
            #递归
            self.parse_json(next_req_url)
        else:
            pass

最终根据网站导航栏的结构进行抓取了29000多篇文章,数据维度包括作者,创建及发布和更新时间,pv浏览量,收藏数,点赞数等

爬虫数据

二.Django+echarts图表 放在上一篇文章maoyan的项目中 新建了app tskr

各年份发表文章数占比

可以看出2016年网站发表文章数接近一半,2017年近10个月的数据和2016年相差不是很大.

写作字数作者TOP10
文章收藏总数TOP10

这两个图表中同时出现的有36氪的朋友们,人人都是产品经理,高小倩,卢晓明

下图是文章pv浏览量排行前10


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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,407评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 六月殷殷,其在怀桑。 水沽且流,连于绵扬。 六月荡荡,苟在昔枳。 君若无悔,沈于未央。
    wan208阅读 313评论 3 6
  • 身在职场工作,“忙”似乎成了职场人的标配。大量的时间倾注在工作上,日复一日,年复一年,一部人上升为优秀者,一部分人...
    Penn先生阅读 4,700评论 24 107
  • 快门的定义 快门是镜头前阻挡光线进来的装置,是一种让光线在一段时间里照射胶片的装置。一般而言快门的时间范围越大越好...
    泪花香阅读 1,159评论 0 8