爬虫小记(二) --- 分析热门标题的方法


有很多文章打着标题党,拥有很高的点击率;它的标题命中了很多读者的兴趣点,那么它是怎么命中的呢?

我们把环境设定在一个特定专题里,这里的每篇文章的标题,都蕴含着潜在的兴趣点;如果把标题分割为一个个关键词,那么热门标题里应该大概率会包含代表着用户兴趣的关键词。

下面的试验是基于已经爬好的数据的,请参考:

爬虫小记(一)--- 爬取简书专题


准备知识


mysql

这里需要用到数据库的查询(query),具体使用参考:

https://dev.mysql.com/doc/connector-python/en/connector-python-example-cursor-select.html

中文分词

使用了中文分词库jieba:

安装:

pip install jieba

工程:

https://github.com/fxsjy/jieba

使用也很简单:

import jieba

jieba.initialize() # 手动初始化

str = '你好好陪她,我四海为家'

seg_list = jieba.cut(str, cut_all=False) # 精确模式

print ' '.join(seg_list)


数据处理


查询数据,同时做分词处理

# 打开数据库

cnx = mysql.connector.connect(user='xxx', password='xxx', database='jianshu')

cursor = cnx.cursor()

# 分条拉取

result = {}

result_hp = {}

hp_stat = {}

cursor.execute("SELECT title,read_num,reply_num,favor_num FROM article_desc WHERE topic='{}' ORDER BY title ASC".format(topic))

for title, read_num, reply_num, favor_num in cursor:

    words = jieba.cut(title, cut_all = False)

for word in words:

    if word in result:

        result[word] += int(read_num)

    else:

        result[word] = int(read_num)

# 词性分析

words = pseg.cut(title)

for word, flag in words:

    result_hp[word] = flag

    if flag in hp_stat:

        hp_stat[flag] += 1

    else:

        hp_stat[flag] = 1

# 关闭数据库

cursor.close()

cnx.close()

上面的分词中,有一段对词性的分词处理:

# 词性分析

words = pseg.cut(title)

这里除了返回关键字之外,还会有一个关键字的词性表示,如名词用'n'表示;以下汇总部分常用的:

HP_DESC = {

u'Ag' : '形语素',

u'n'  : '名词',

u'v'  : '动词',

u'x'  : '非语素字',

u'r'  : '代词',

u'm'  : '数词',

u'd'  : '副词',

u'a'  : '形容词',

u'nr' : '人名',

u'p'  : '介词',

u'c'  : '连词',

u't'  : '时间词',

u'ns' : '地名',

u'f'  : '方位词',

u'i'  : '成语',

u'l'  : '习用语',

u'vn' : '名动词',

u'y'  : '语气词',

u'u'  : '助词',

u'nz' : '其他专名',

u's'  : '处所词',

u'q'  : '量词',

}

接着对上面获取到的结果数组,按照点击值进行排序:

# 排序

sorted_items = sorted(result.items(),key = operator.itemgetter(1), reverse = True)

sorted_hp = sorted(hp_stat.items(),key = operator.itemgetter(1), reverse = False)

为了可以图形化显示,我们定义数据到图形的显示方法:

from matplotlib import pyplot as plt

import numpy as np

from pylab import mpl

from matplotlib.ticker import MultipleLocator, FormatStrFormatter

# 解决UnicodeWarning问题

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

# 解决图形显示中文异常的问题

mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体

mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

def showBar(title, result):

    # 抽取数据

    x_datas = [int(x[1]) for x in result]

    x_labels = [x[0] for x in result]

    fig=plt.figure(figsize=(len(x_datas), 6))

    ax1=plt.subplot(111)

    data=np.array(x_datas)

    width=0.5

    x_bar=np.arange(len(x_datas))

    rect=ax1.bar(left=x_bar,height=data,width=width,color="lightblue")

    #向各条形上添加数据标签

    # for rec in rect:

    #    x=rec.get_x()

    #    height=rec.get_height()

    #    ax1.text(x+0.01,1.02*height,'%.0f' % height)

    #绘制x,y坐标轴刻度及标签,标题

    ax1.yaxis.set_major_formatter(FormatStrFormatter('%1.0f'))

    ax1.set_xticks(x_bar)

    ax1.set_xticklabels(tuple(x_labels), rotation=45)

    ax1.set_ylabel("点击次数")

    ax1.set_title(title)

    ax1.grid(False)

    ax1.set_ylim(0,max(x_datas)*1.1)

    # 显示或者保存

    plt.show()

    # plt.savefig('{}.png'.format(title), dpi=100)

最后是测试程序:

def stat_topic(topic):

   ...

    # 打印

    showBarAndSave(topic, '名词', sorted_items, result_hp, 20)

    showBarAndSave(topic, '动词', sorted_items, result_hp, 20)

    ...

# 测试程序

stat_topic('故事')

stat_topic('程序员')


标题分析


这里我们挑选了两个专题,分别是‘故事’和‘程序员’;对每个专题,显示最热门的20个名词和动词,因为名词最能说明兴趣范围,而动词最能说明兴趣点。

先看下程序员们的兴趣点吧



很容易发现,程序员们的关注点,更多在怎么解决问题上,其次是学习,方法,框架,开源等等。

再看看文学青年们的兴趣点



嗯嗯,信息量好大... 最多的居然是男同学,看来是女性居多吧?还有菊花是什么鬼... 

再看看动作就更可怕了,离婚还能理解,这‘操’,‘爆’又是什么!!!



每个专题代表着一个人群,他们因为共同的兴趣聚集在一起,所以不同专题的兴趣范围都差别很大。

在独立专题的兴趣范围里,可以通过这些点击量最高的关键字,判别出来这群人的热门兴趣点。

那么,如果你想写篇比较吸引人的文章,就可以多多参考这些热门关键字了。

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

推荐阅读更多精彩内容

  • 写的人多了能静心去读的人太少说的人多了能真正去聆听的人太少 生活是个大舞台登台演戏的越来越多甘心台下看戏的越来越少...
    真小实阅读 449评论 6 5
  • 上大学第二个学期,时间好快,又快放假了。直到现在,还觉得自己是新生,沉浸在小学妹的迷梦里。大学的生活与预想中是完全...
    小凡咪阅读 219评论 0 2
  • 近几年“寒门难处贵子”这句话在社会上广为流传,这句话的愿意是: 相比于大城市的孩子,农村的孩子由于资源,见识,人脉...
    小笑猪阅读 662评论 8 25
  • 黄土文学流派作家路遥,徜徉于陕北高原,那是个火红的岁月,革命无处不在,但又要革谁的命呢?他用自己的人生去思考,感悟...
    小李子的藏书阁阅读 342评论 0 0