一.爬蟲作業(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