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

作者: chengcxy | 来源:发表于2017-10-21 19:28 被阅读491次

    一.爬虫作业:抓取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

    三.爬虫和django代码

    36kr网代码地址:https://github.com/chengcxy/spiders/blob/master/36kr.py

    36kr网站数据的抓取放在django项目maoyan中 app名为tskr

    36kr网图表:https://github.com/chengcxy/Django_project/tree/master/maoyan

    相关文章

      网友评论

      本文标题:python爬虫-36kr网+Django+Echarts图表

      本文链接:https://www.haomeiwen.com/subject/gqqwuxtx.html