陳恒星
摘要:關(guān)鍵詞挖掘是網(wǎng)站搜索引擎優(yōu)化中的一項重要工作。文章介紹了Python爬蟲的工作原理,分析了進(jìn)行百度關(guān)鍵詞挖掘的基本思路,設(shè)計了合理的關(guān)鍵詞挖掘算法,并基于python編程技術(shù)實現(xiàn)了相應(yīng)的功能,從而使關(guān)鍵詞挖掘這樣一項繁瑣的工作變得快捷而高效。
關(guān)鍵詞:Python;關(guān)鍵詞挖掘;算法分析與實現(xiàn);
1 引言
在網(wǎng)站的搜索引擎優(yōu)化工作中關(guān)鍵詞的設(shè)計往往是最重要的一個環(huán)節(jié)之一。通過對搜索引擎工具的分析,我們可以看到相關(guān)搜索詞和下拉框往往是用戶搜索的主要入口,因此在這些地方出現(xiàn)的關(guān)鍵詞最能反應(yīng)以往用戶的搜索意圖,但在以往獲取這些關(guān)鍵詞的途徑上是比較麻煩和費力的。而python作為一種高效的爬蟲工具在解決數(shù)據(jù)抓取和分析上是最合適的選擇。本文主要以百度搜索引擎為例,以關(guān)鍵詞挖掘作為主要工作目標(biāo),以python爬蟲作為技術(shù)手段,設(shè)計和實現(xiàn)了百度相關(guān)關(guān)鍵詞挖掘的算法。
2 Python爬蟲的工作原理
一般來說,網(wǎng)絡(luò)爬蟲是根據(jù)事先設(shè)置的若干初始網(wǎng)頁的URL地址開始,然后按照一定的策略爬取網(wǎng)頁,獲取初始網(wǎng)頁上的URL地址列表,然后每當(dāng)抓取一個網(wǎng)頁時,爬蟲會提取該網(wǎng)頁新的URL地址并放入到未爬取的隊列中去,然后循環(huán)的從未爬取的隊列中取出一個URL地址再次進(jìn)行新一輪的爬取,不斷的重復(fù)上述過程,直到隊列中的URL地址爬取完畢或者達(dá)到其他的限制條件,爬蟲才會結(jié)束。Python爬蟲則是采用Python編程語言實現(xiàn)的一種從網(wǎng)上抓取各類數(shù)據(jù)信息的自動化程序。
Python通過引用不同的庫文件實現(xiàn)網(wǎng)絡(luò)爬蟲功能,主要可以分為4個步驟,如下圖所示:
1、發(fā)起請求
在發(fā)起請求階段,python主要通過引用requests庫來實現(xiàn)。可以構(gòu)造一個包含請求URL地址、偽裝請求頭headers、請求方式method、最長時間timeout的Request,然后向目標(biāo)網(wǎng)址發(fā)送一個Request請求。
2、獲取響應(yīng)內(nèi)容
在獲取響應(yīng)階段,如果服務(wù)器能正常響應(yīng),會返回一個Response對象,Response 的內(nèi)容可能有 HTML,Json 字符串,二進(jìn)制數(shù)據(jù) (圖片,視頻等) 等類型。這個過程就是服務(wù)器接收客戶端的Request請求,經(jīng)過解析發(fā)送給瀏覽器的網(wǎng)頁 HTML 文件。
3、解析內(nèi)容
在解析返回內(nèi)容的階段,主要通過第三方解析庫如Beautifulsoup,Xpath、pyquery等實現(xiàn)返回內(nèi)容的解析。如果內(nèi)容是HTML,可以用正則表達(dá)式(RE模塊)處理,也可以用網(wǎng)頁解析庫進(jìn)行解析;如果是 Json,可以直接轉(zhuǎn)為 Json 對象解析;如果是二進(jìn)制數(shù)據(jù),可以以wb的方式寫入文件進(jìn)一步處理。
4、保存數(shù)據(jù)
在數(shù)據(jù)保存階段,一般的保存的方式可以是文本或CVS格式的文檔,還可以是保存到數(shù)據(jù)庫(MySQL,Redis 、Mongdb),或者保存為指定格式的 jpeg,mp4 等文件。
3 關(guān)鍵詞挖掘算法分析
3.1關(guān)鍵詞挖掘的需求分析
在百度搜索引擎優(yōu)化的過程中,關(guān)鍵詞的選擇是一項很重要的工作。從搜索引擎優(yōu)化的角度來說,因此挖掘的關(guān)鍵詞遵循4個基本原則:
(1)與網(wǎng)站優(yōu)化密切相關(guān)的關(guān)鍵詞,因為這些詞才能直接反應(yīng)網(wǎng)站的推廣目標(biāo),我們通常選擇網(wǎng)站主題相關(guān)的主詞;
(2)有商業(yè)價值的詞,在關(guān)鍵詞與網(wǎng)站相關(guān)的前提下,要盡量選擇具有營銷導(dǎo)向的詞,這些詞最能反應(yīng)用戶對網(wǎng)站的需求導(dǎo)向,搜索該詞的用戶是最容易有轉(zhuǎn)化行為的潛在客戶;
(3)搜索指數(shù)高的詞,理論上來說,搜索指數(shù)越高的詞越能反應(yīng)互聯(lián)網(wǎng)用戶對該詞的搜索需求,也是網(wǎng)站搜索引擎流量的主要來源;
(4)低競爭度的詞,在流量競爭激烈的情況下,選擇一些低競爭度的詞能讓網(wǎng)站搜索引擎優(yōu)化更容易有排名,有流量。
基于以上四點要求去選擇關(guān)鍵詞才能讓網(wǎng)站搜索引擎優(yōu)化更符合用戶的搜索需求。而搜索引擎平臺提供的“相關(guān)搜索”功能在一定程度上就反應(yīng)了以往用戶的搜索需求。從而對”相關(guān)搜索”關(guān)鍵詞的挖掘就成了百度關(guān)鍵詞挖掘重要途徑。
3.2 相關(guān)關(guān)鍵詞抓取策略分析
在百度相關(guān)關(guān)鍵詞挖掘中,抓取詞的先后順序不同,會直接影響到相關(guān)詞的相關(guān)度,采用不同的抓取策略也會影響到關(guān)鍵詞挖掘的規(guī)模。本文的相關(guān)關(guān)鍵詞的抓取主要考慮以下兩種抓取策略:
1.深度優(yōu)先遍歷策略:網(wǎng)絡(luò)爬蟲從主詞開始,然后找到若干個百度相關(guān)詞,一個詞接一個詞跟蹤下去,處理完這條線路的所有相關(guān)詞之后再轉(zhuǎn)入下一個詞處理。以下圖為例:
遍歷路徑:黑茶網(wǎng)- 茶網(wǎng)-百分茶官網(wǎng) ?黑茶價格 ?黑茶產(chǎn)區(qū)-黑茶產(chǎn)地在哪-麻黑茶產(chǎn)地在哪里 安化黑茶 黑茶網(wǎng)平臺
2.廣度優(yōu)先遍歷策略:網(wǎng)絡(luò)爬蟲從主詞開始,然后找到若干個百度相關(guān)詞 ,先處理該層的所有詞后,然后選擇其中的一個詞進(jìn)入下一層的抓取,以此類推,直到都沒有相關(guān)詞就結(jié)束。還是以上面的圖為例:
遍歷路徑:黑茶網(wǎng)-黑茶價格-黑茶產(chǎn)區(qū)-安化黑茶-黑茶網(wǎng)平臺-茶網(wǎng) ?黑茶產(chǎn)地在哪 麻黑茶產(chǎn)地在哪里 百分茶官網(wǎng)絡(luò)
由于百度相關(guān)詞的無窮性和不確定性,所以兩種抓取策略都應(yīng)該控制挖掘的深度,同時由于抓取的深度越深抓取到的詞與主詞的相關(guān)性會越來差。因此本文最好采用廣度優(yōu)先遍歷策略。
3.3相關(guān)關(guān)鍵詞挖掘功能分析
針對百度的“相關(guān)搜索”進(jìn)行關(guān)鍵詞挖掘,以“湖南黑茶網(wǎng)”為例,爬蟲程序以設(shè)定的主詞,按一定的爬取策略實現(xiàn)百度相關(guān)關(guān)鍵詞挖掘的功能如下:
(1)根據(jù)關(guān)鍵詞的挖掘需求設(shè)定爬蟲程序挖掘主詞的功能??梢愿鶕?jù)主詞拓展百度相關(guān)搜索詞,如確定“湖南黑茶網(wǎng)”的網(wǎng)站主詞為”黑茶”、”黑茶網(wǎng)”,”黑茶價格”。
(2)根據(jù)關(guān)鍵詞挖掘的規(guī)模和相關(guān)度要求,可以設(shè)定關(guān)鍵詞抓取深度的功能。一般來說,一個關(guān)鍵詞正常情況下爬蟲程序能夠獲取到10個相關(guān)搜索詞,但是如果只獲取一層深度的關(guān)鍵詞的話,則爬蟲能夠抓取的關(guān)鍵詞數(shù)量非常有限,因此爬蟲程序中需要能設(shè)定爬蟲循環(huán)抓取的深度。但事實上,爬蟲抓取的深度越深,有可能重復(fù)抓取到一些相同的詞,這樣爬蟲的效率就不高,同時隨著爬取深度加深,相關(guān)性就會越低,這樣抓取的關(guān)鍵詞與網(wǎng)站推廣的目標(biāo)就會越來越遠(yuǎn)。
(3)根據(jù)抓取原則對拓展詞進(jìn)行分情況處理的功能。根據(jù)關(guān)鍵詞的挖掘的需求分析,一般可以把爬蟲抓取到的拓展到詞分為四種情況,一種是具有商業(yè)價值的詞,諸如關(guān)鍵詞中包含”價格”、“錢”、“買”,那么對這些詞做高價值的屬性標(biāo)注;一種是爬蟲頻繁抓取到的詞,說明這些詞被搜索的次數(shù)多,更能反應(yīng)用戶的搜索需要,同樣可以做這些詞的高搜索的屬性標(biāo)注;一種是低競爭度的詞,可以通過該詞的競爭頁面數(shù)來衡量其競爭激烈程度。具體來說就是記錄“百度為您找到相關(guān)結(jié)果”的結(jié)果。這樣的結(jié)果數(shù)越小說明競爭度越低。一種是沒有相關(guān)詞的情況,則只要保留該詞,以避免下次拓展重復(fù)操作。
(4)對拓展詞排序整理的功能。爬蟲抓取到相關(guān)詞后保存到文本文件中,并標(biāo)注詞的高價值詞、高搜索詞、低競爭詞等屬性,然后根據(jù)需要進(jìn)行某些維度的排序。
4 基于python的關(guān)鍵詞挖掘算法實現(xiàn)
本文通過定義不同函數(shù)來實現(xiàn)關(guān)鍵詞挖掘。使用定義全局的字典和元組共享的方式來進(jìn)行關(guān)鍵詞的過濾和臨時結(jié)果存儲,以消息隊列動態(tài)管理準(zhǔn)備進(jìn)行抓取的關(guān)鍵詞。使用雙元素元組來作為作為消息隊列的參數(shù),其中一個為關(guān)鍵詞,另一個為當(dāng)前的拓展是第幾次。主要代碼如下:
#程序入口
if __name__ == '__main__':
result = {} # 保存挖掘詞結(jié)果
seen = set()# 保存在隊列中的關(guān)鍵詞
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:
# 關(guān)鍵詞+次數(shù)+相關(guān)結(jié)果數(shù)+價值屬性的文件輸出方式
line = '%s\t%d\%s\t%s\tn' % (item[0],item[1],item[2],item[3])
save.write(line)
save.flush()
save.close()
#提取相關(guān)關(guān)鍵詞及其相關(guān)結(jié)果數(shù)、詞屬性
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'
#關(guān)鍵詞過濾和統(tǒng)計函數(shù)
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 結(jié)束語
總而言之,python編程語言在實現(xiàn)網(wǎng)絡(luò)爬蟲應(yīng)用中有其他獨特的優(yōu)勢。而本文正是充分利用python語言來解決搜索引擎優(yōu)化關(guān)鍵詞挖掘這一復(fù)雜多樣的工作問題,把反復(fù)、無趣的工作變成了一種只要基于某些策略,自動化高效完成的爬蟲算法程序,切實的解決了搜索引擎優(yōu)化選詞難,盲目選詞的問題。但是爬蟲算法程序本身也要需要完善的地方,諸如怎樣更科學(xué)合理的判別關(guān)鍵詞的高價值性,爬蟲程序挖掘深度與關(guān)鍵詞相關(guān)性平衡等問題都有待進(jìn)一步的研究和探索。
參考文獻(xiàn)
[1]曾曉娟;基于Python爬蟲技術(shù)的應(yīng)用[J];辦公自動化;2018年20期
[2]闖躍龍;郭文平;面向非計算機專業(yè)學(xué)生的Python教學(xué)內(nèi)容設(shè)計[J];臺州學(xué)院學(xué)報;2018年03期
[3]姚建盛;李淑梅;Python在科學(xué)計算中的應(yīng)用[J];數(shù)字技術(shù)與應(yīng)用;2016年11期
[4]錢程;陽小蘭;朱福喜;基于Python的網(wǎng)絡(luò)爬蟲技術(shù)[J];黑龍江科技信息;2016年36期
[5]李彥;基于Python的網(wǎng)絡(luò)爬蟲技術(shù)的研究[J];探索與觀察;2021年18期