基于python的关键词挖掘算法分析与实现

2021-11-22 15:13陈恒星
科技信息·学术版 2021年17期
关键词:爬虫搜索引擎网页

陈恒星

摘要:关键词挖掘是网站搜索引擎优化中的一项重要工作。文章介绍了Python爬虫的工作原理,分析了进行百度关键词挖掘的基本思路,设计了合理的关键词挖掘算法,并基于python编程技术实现了相应的功能,从而使关键词挖掘这样一项繁琐的工作变得快捷而高效。

关键词:Python;关键词挖掘;算法分析与实现;

1 引言

在网站的搜索引擎优化工作中关键词的設计往往是最重要的一个环节之一。通过对搜索引擎工具的分析,我们可以看到相关搜索词和下拉框往往是用户搜索的主要入口,因此在这些地方出现的关键词最能反应以往用户的搜索意图,但在以往获取这些关键词的途径上是比较麻烦和费力的。而python作为一种高效的爬虫工具在解决数据抓取和分析上是最合适的选择。本文主要以百度搜索引擎为例,以关键词挖掘作为主要工作目标,以python爬虫作为技术手段,设计和实现了百度相关关键词挖掘的算法。

2 Python爬虫的工作原理

一般来说,网络爬虫是根据事先设置的若干初始网页的URL地址开始,然后按照一定的策略爬取网页,获取初始网页上的URL地址列表,然后每当抓取一个网页时,爬虫会提取该网页新的URL地址并放入到未爬取的队列中去,然后循环的从未爬取的队列中取出一个URL地址再次进行新一轮的爬取,不断的重复上述过程,直到队列中的URL地址爬取完毕或者达到其他的限制条件,爬虫才会结束。Python爬虫则是采用Python编程语言实现的一种从网上抓取各类数据信息的自动化程序。

Python通过引用不同的库文件实现网络爬虫功能,主要可以分为4个步骤,如下图所示:

1、发起请求

在发起请求阶段,python主要通过引用requests库来实现。可以构造一个包含请求URL地址、伪装请求头headers、请求方式method、最长时间timeout的Request,然后向目标网址发送一个Request请求。

2、获取响应内容

在获取响应阶段,如果服务器能正常响应,会返回一个Response对象,Response 的内容可能有 HTML,Json 字符串,二进制数据 (图片,视频等) 等类型。这个过程就是服务器接收客户端的Request请求,经过解析发送给浏览器的网页 HTML 文件。

3、解析内容

在解析返回内容的阶段,主要通过第三方解析库如Beautifulsoup,Xpath、pyquery等实现返回内容的解析。如果内容是HTML,可以用正则表达式(RE模块)处理,也可以用网页解析库进行解析;如果是 Json,可以直接转为 Json 对象解析;如果是二进制数据,可以以wb的方式写入文件进一步处理。

4、保存数据

在数据保存阶段,一般的保存的方式可以是文本或CVS格式的文档,还可以是保存到数据库(MySQL,Redis 、Mongdb),或者保存为指定格式的 jpeg,mp4 等文件。

3 关键词挖掘算法分析

3.1关键词挖掘的需求分析

在百度搜索引擎优化的过程中,关键词的选择是一项很重要的工作。从搜索引擎优化的角度来说,因此挖掘的关键词遵循4个基本原则:

(1)与网站优化密切相关的关键词,因为这些词才能直接反应网站的推广目标,我们通常选择网站主题相关的主词;

(2)有商业价值的词,在关键词与网站相关的前提下,要尽量选择具有营销导向的词,这些词最能反应用户对网站的需求导向,搜索该词的用户是最容易有转化行为的潜在客户;

(3)搜索指数高的词,理论上来说,搜索指数越高的词越能反应互联网用户对该词的搜索需求,也是网站搜索引擎流量的主要来源;

(4)低竞争度的词,在流量竞争激烈的情况下,选择一些低竞争度的词能让网站搜索引擎优化更容易有排名,有流量。

基于以上四点要求去选择关键词才能让网站搜索引擎优化更符合用户的搜索需求。而搜索引擎平台提供的“相关搜索”功能在一定程度上就反应了以往用户的搜索需求。从而对”相关搜索”关键词的挖掘就成了百度关键词挖掘重要途径。

3.2 相关关键词抓取策略分析

在百度相关关键词挖掘中,抓取词的先后顺序不同,会直接影响到相关词的相关度,采用不同的抓取策略也会影响到关键词挖掘的规模。本文的相关关键词的抓取主要考虑以下两种抓取策略:

1.深度优先遍历策略:网络爬虫从主词开始,然后找到若干个百度相关词,一个词接一个词跟踪下去,处理完这条线路的所有相关词之后再转入下一个词处理。以下图为例:

遍历路径:黑茶网- 茶网-百分茶官网  黑茶价格  黑茶产区-黑茶产地在哪-麻黑茶产地在哪里 安化黑茶 黑茶网平台

2.广度优先遍历策略:网络爬虫从主词开始,然后找到若干个百度相关词 ,先处理该层的所有词后,然后选择其中的一个词进入下一层的抓取,以此类推,直到都没有相关词就结束。还是以上面的图为例:

遍历路径:黑茶网-黑茶价格-黑茶产区-安化黑茶-黑茶网平台-茶网  黑茶产地在哪 麻黑茶产地在哪里 百分茶官网络

由于百度相关词的无穷性和不确定性,所以两种抓取策略都应该控制挖掘的深度,同时由于抓取的深度越深抓取到的词与主词的相关性会越来差。因此本文最好采用广度优先遍历策略。

3.3相关关键词挖掘功能分析

针对百度的“相关搜索”进行关键词挖掘,以“湖南黑茶网”为例,爬虫程序以设定的主词,按一定的爬取策略实现百度相关关键词挖掘的功能如下:

(1)根据关键词的挖掘需求设定爬虫程序挖掘主词的功能。可以根据主词拓展百度相关搜索词,如确定“湖南黑茶网”的网站主词为”黑茶”、”黑茶网”,”黑茶价格”。

(2)根据关键词挖掘的规模和相关度要求,可以设定关键词抓取深度的功能。一般来说,一个关键词正常情况下爬虫程序能够获取到10个相关搜索词,但是如果只获取一层深度的关键词的话,则爬虫能够抓取的关键词数量非常有限,因此爬虫程序中需要能设定爬虫循环抓取的深度。但事实上,爬虫抓取的深度越深,有可能重复抓取到一些相同的词,这样爬虫的效率就不高,同时随着爬取深度加深,相关性就会越低,这样抓取的关键词与网站推广的目标就会越来越远。

(3)根据抓取原则对拓展词进行分情况处理的功能。根据关键词的挖掘的需求分析,一般可以把爬蟲抓取到的拓展到词分为四种情况,一种是具有商业价值的词,诸如关键词中包含”价格”、“钱”、“买”,那么对这些词做高价值的属性标注;一种是爬虫频繁抓取到的词,说明这些词被搜索的次数多,更能反应用户的搜索需要,同样可以做这些词的高搜索的属性标注;一种是低竞争度的词,可以通过该词的竞争页面数来衡量其竞争激烈程度。具体来说就是记录“百度为您找到相关结果”的结果。这样的结果数越小说明竞争度越低。一种是没有相关词的情况,则只要保留该词,以避免下次拓展重复操作。

(4)对拓展词排序整理的功能。爬虫抓取到相关词后保存到文本文件中,并标注词的高价值词、高搜索词、低竞争词等属性,然后根据需要进行某些维度的排序。

4 基于python的关键词挖掘算法实现

本文通过定义不同函数来实现关键词挖掘。使用定义全局的字典和元组共享的方式来进行关键词的过滤和临时结果存储,以消息队列动态管理准备进行抓取的关键词。使用双元素元组来作为作为消息队列的参数,其中一个为关键词,另一个为当前的拓展是第几次。主要代码如下:

#程序入口

if __name__ == '__main__':

result = {} # 保存挖掘词结果

seen = set()# 保存在队列中的关键词

k_queue = Queue()

loop =10 #挖掘词的深度

ua = ' 伪装headers '

with open('keys.txt') as kwfile:

for key in kwfile:

key = key.strip()

k_queue.put((key,1))

seen.add(key)

failed = open('fail.txt','w')

while True:

kw,cloop = kw_queue.get()

print('CurLoop:{} Checking:{}'.format(cloop,kw))

query = 'https://www.baidu.com/s?word={}'.format(kw)

try:

res = requests.get (query,timeout=10,user_agent=ua)

if res:

xgjgs,kw_list,jzsx = extract(res,kw)

filter(cloop,kw_list,xgjgs)

else:

failed.write('{}\n'.format(kw))

finally:

kw_queue.task_done()

sort_list = sorted(result.items(),key=lambda x:x[1],reverse=True)

save = open('bdkey.txt','w',encoding='utf-8')

for item in sort_list:

# 关键词+次数+相关结果数+价值属性的文件输出方式

line = '%s\t%d\%s\t%s\tn' % (item[0],item[1],item[2],item[3])

save.write(line)

save.flush()

save.close()

#提取相关关键词及其相关结果数、词属性

def extract(html,kw):

soup=BeautifulSoup(html,'lxml')

xgjgs=soup.select('span.nums_text')[0].text.strip()

xgList=re.findall(r'class="c-font-medium new-inc-rs-item”>(.*?)</a>',html,re.S|re.I)

jzsx=isJzsx(kw)

return xgjgs,xgList,jzsx

# 判断词的价值属性

def isJzsx(kw)

if '钱' in kw:

jzsx='F'

elif '价格' in kw:

jzsx='T'

else:

jzsx='F'

#关键词过滤和统计函数

def filter(current_loop,kwlist,xgjgs,jzsx):

for kw in kwlist:

if current_loop < loop and kw not in seen:

kw_queue.put((kw,current_loop+1))

seen.add(kw)

if kw in self.result:

result[kw]+= 1

else:

result[kw]= 1

result['xgjgs']=xgjgs

result['jzsx']=jzsx

5 结束语

总而言之,python编程语言在实现网络爬虫应用中有其他独特的优势。而本文正是充分利用python语言来解决搜索引擎优化关键词挖掘这一复杂多样的工作问题,把反复、无趣的工作变成了一种只要基于某些策略,自动化高效完成的爬虫算法程序,切实的解决了搜索引擎优化选词难,盲目选词的问题。但是爬虫算法程序本身也要需要完善的地方,诸如怎样更科学合理的判别关键词的高价值性,爬虫程序挖掘深度与关键词相关性平衡等问题都有待进一步的研究和探索。

参考文献

[1]曾晓娟;基于Python爬虫技术的应用[J];办公自动化;2018年20期

[2]闯跃龙;郭文平;面向非计算机专业学生的Python教学内容设计[J];台州学院学报;2018年03期

[3]姚建盛;李淑梅;Python在科学计算中的应用[J];数字技术与应用;2016年11期

[4]钱程;阳小兰;朱福喜;基于Python的网络爬虫技术[J];黑龙江科技信息;2016年36期

[5]李彦;基于Python的网络爬虫技术的研究[J];探索与观察;2021年18期

猜你喜欢
爬虫搜索引擎网页
Chrome 99 Canary恢复可移除预置搜索引擎选项
基于Python的网络爬虫和反爬虫技术研究
世界表情符号日
Python反爬虫设计
基于Scrapy框架的分布式网络爬虫的研究与实现
基于HTML5静态网页设计
谁抢走了低价机票
搜索引擎怎样对网页排序
基于Lucene搜索引擎的研究
搜索引擎,不止有百度与谷歌