python爬蟲-36kr網(wǎng)+Django+Echarts圖表

一.爬蟲作業(yè):抓取36kr網(wǎng)站數(shù)據(jù)

爬蟲代碼和數(shù)據(jù)sql腳本在下方鏈接,抓取過程主要是抓包找到url遞歸解析的規(guī)律,三個(gè)主要的函數(shù) 以及 表結(jié)構(gòu)腳本如下

#建表語句(寫爬蟲時(shí)候忘記添加user_url 后續(xù)數(shù)據(jù)處理時(shí)候update補(bǔ)全了這個(gè)字段)
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 '標(biāo)題',
  `user_id` varchar(255) DEFAULT NULL COMMENT '用戶id',
  `user_name` varchar(255) DEFAULT NULL COMMENT '用戶名',
  `total_words` varchar(255) DEFAULT NULL COMMENT '文章總字?jǐn)?shù)',
  `close_comment` varchar(255) DEFAULT NULL COMMENT '關(guān)閉評(píng)論數(shù)',
  `favorite` varchar(255) DEFAULT NULL COMMENT '收藏?cái)?shù)',
  `likes` varchar(255) DEFAULT NULL COMMENT '贊數(shù)',
  `pv` varchar(255) DEFAULT NULL COMMENT 'pv瀏覽量',
  `pv_app` varchar(255) DEFAULT NULL COMMENT 'app瀏覽量',
  `pv_mobile` varchar(255) DEFAULT NULL COMMENT '手機(jī)端瀏覽量',
  `view_count` varchar(255) DEFAULT NULL COMMENT '觀看次數(shù)統(tǒng)計(jì)',
  `extraction_tags` text COMMENT '文章標(biāo)簽',
  `summary` text COMMENT '摘要',
  `title_mobile` text COMMENT '手機(jī)端標(biāo)題',
  `introduction` varchar(255) DEFAULT NULL COMMENT '簡(jiǎn)介',
  `published_at` varchar(255) DEFAULT NULL COMMENT '發(fā)表時(shí)間',
  `created_at` varchar(255) DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',
  `updated_at` varchar(255) DEFAULT NULL COMMENT '更新時(shí)間',
  `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 '請(qǐng)求url',
  `user_url` varchar(50) DEFAULT NULL COMMENT '用戶url',,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=29045 DEFAULT CHARSET=utf8;

爬蟲核心三個(gè)函數(shù) 人工構(gòu)造導(dǎo)航欄(字段tag)的 column_ids和 column_names列表 進(jìn)行字典映射 請(qǐng)求數(shù)據(jù)后將導(dǎo)航欄數(shù)據(jù)寫入數(shù)據(jù)庫(kù),第一次請(qǐng)求url只有column_id動(dòng)態(tài) per_page參數(shù)寫死=1

    #第一次請(qǐng)求解析出后續(xù)的請(qǐng)求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)
    #第一次請(qǐng)求url只有column_id動(dòng)態(tài) per_page參數(shù)寫死=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('解析導(dǎo)航欄:%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 數(shù)據(jù)網(wǎng)為100個(gè)item循環(huán)遍歷
    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('下一次請(qǐng)求url-->', next_req_url)
            #遞歸
            self.parse_json(next_req_url)
        else:
            pass

最終根據(jù)網(wǎng)站導(dǎo)航欄的結(jié)構(gòu)進(jìn)行抓取了29000多篇文章,數(shù)據(jù)維度包括作者,創(chuàng)建及發(fā)布和更新時(shí)間,pv瀏覽量,收藏?cái)?shù),點(diǎn)贊數(shù)等

爬蟲數(shù)據(jù)

二.Django+echarts圖表 放在上一篇文章maoyan的項(xiàng)目中 新建了app tskr

各年份發(fā)表文章數(shù)占比

可以看出2016年網(wǎng)站發(fā)表文章數(shù)接近一半,2017年近10個(gè)月的數(shù)據(jù)和2016年相差不是很大.

寫作字?jǐn)?shù)作者TOP10
文章收藏總數(shù)TOP10

這兩個(gè)圖表中同時(shí)出現(xiàn)的有36氪的朋友們,人人都是產(chǎn)品經(jīng)理,高小倩,盧曉明

下圖是文章pv瀏覽量排行前10


文章pv瀏覽量TOP10
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評(píng)論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,821評(píng)論 4 61
  • 六月殷殷,其在懷桑。 水沽且流,連于綿揚(yáng)。 六月蕩蕩,茍?jiān)谖翳住?君若無悔,沈于未央。
    wan208閱讀 338評(píng)論 3 6
  • 身在職場(chǎng)工作,“忙”似乎成了職場(chǎng)人的標(biāo)配。大量的時(shí)間傾注在工作上,日復(fù)一日,年復(fù)一年,一部人上升為優(yōu)秀者,一部分人...
    Penn先生閱讀 4,840評(píng)論 24 107
  • 快門的定義 快門是鏡頭前阻擋光線進(jìn)來的裝置,是一種讓光線在一段時(shí)間里照射膠片的裝置。一般而言快門的時(shí)間范圍越大越好...
    淚花香閱讀 1,329評(píng)論 0 8

友情鏈接更多精彩內(nèi)容