人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

Python 詳解爬取并統(tǒng)計CSDN全站熱榜標(biāo)題關(guān)鍵詞詞頻流程

發(fā)布日期:2021-12-12 22:08 | 文章來源:腳本之家

最近在出差,發(fā)現(xiàn)住的賓館居然有小強(qiáng)。所以出差無聊之際,寫了點(diǎn)爬蟲的代碼玩玩,問就是應(yīng)景。本篇文章主要是爬取CSDN全站綜合熱榜的100個標(biāo)題,然后分詞提取關(guān)鍵詞,統(tǒng)計一下詞頻。

我想了下,對于其他博主還是有用的,可以看看什么標(biāo)題可以上熱榜,就分享一下吧。順便把我解決各類問題的方法,說一說。

環(huán)境

使用的IDE為:spyder(有看著界面不習(xí)慣的,忍一下,不關(guān)鍵)

頁面爬取使用chromedriver,至于原因我后面會說。

分詞器:jieba

爬取頁面地址:https://blog.csdn.net/rank/list

爬蟲代碼

這里說一下為什么沒有用requests直接獲取頁面源碼,主要是因為該頁面并不能直接請求出源碼。而是通過頁面滾動到最下方,才可以顯示出全部的100個排名的文章。

所以我的思路是,使用chromedriver,然后執(zhí)行js實(shí)現(xiàn)滾動頁面到最下方。

這里需要說明一下chromedriver的下載,需要根據(jù)你google瀏覽器的版本來。我的筆記本事mac,可以點(diǎn)擊左上角的Chrome,再點(diǎn)擊關(guān)于Google Chrome看看自己的瀏覽器版本。

分享一下chromedriver的下載地址:google chrome driver下載地址

簡單說明一下driver的原理,就是模擬瀏覽器打開url的操作,就像我們手點(diǎn)一樣,具體原理改天可以再聊聊。

不廢話了,上爬蟲工具代碼

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Nov  4 17:15:06 2021
@author: huyi
"""
 
from selenium import webdriver
import time
 
# =============================================================================
# 爬取動態(tài)下滑加載網(wǎng)頁
# =============================================================================
def pa(url):
 driver = webdriver.Chrome('/usr/local/bin/chromedriver')
 driver.get(url)
 js = '''
 let height = 0
  let interval = setInterval(() => {
window.scrollTo({
 top: height,
 behavior: "smooth"
});
height += 500
  }, 500);
  setTimeout(() => {
clearInterval(interval)
  }, 20000);
 '''
 driver.execute_script(js)
 time.sleep(20)
 source = driver.page_source
 driver.close()
 return source

代碼說明

1、代碼主要是一個工具方法,使用diver打開瀏覽器。然后通過js代碼,模擬向下滾動的操作。

2、根據(jù)你的網(wǎng)絡(luò)條件,里面的超時時間你可以調(diào)整。避免還沒有滾動到最下面就結(jié)束了,因為我賓館的網(wǎng)比較卡,所以設(shè)置的比較大。

3、返回頁面源碼,為了后面的xpath解析。

驗證一下

OK,已經(jīng)拿到了頁面源碼了。

關(guān)鍵詞提取代碼

我們把關(guān)鍵詞提取的方法也準(zhǔn)備一下。不廢話,上代碼。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Nov  4 21:53:22 2021
@author: huyi
"""
 
 
import jieba.analyse
 
 
def get_key_word(sentence):
 result_dic = {}
 words_lis = jieba.analyse.extract_tags(
  sentence, topK=3, withWeight=True, allowPOS=())
 for word, flag in words_lis:
  if word in result_dic:
result_dic[word] += 1
  else:
result_dic[word] = 1
 return result_dic

代碼說明

1、簡單說明一下,方法取的是權(quán)重最高的3個詞,可以按照你的喜歡調(diào)整。

2、把相同的詞做一個計數(shù),方便把100的標(biāo)題關(guān)鍵詞詞頻統(tǒng)計用。

主程序代碼

主程序主要是將源碼中的標(biāo)題,使用lxml進(jìn)行元素提取,獲取標(biāo)題。然后詞頻統(tǒng)計后輸出結(jié)果文本。

不廢話,上代碼。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Nov  4 14:01:38 2021
@author: huyi
"""
from lxml import etree
from tools.dynamic_page import pa
from tools.analyse_word import get_key_word
 
 
csdn_url = 'https://blog.csdn.net/rank/list'
source = etree.HTML(pa(csdn_url))
 
titles = source.xpath("http://div[@class='hosetitem-title']/a/text()")
key_word_dic = {}
for x in titles:
 if x:
  for k, v in get_key_word(x).items():
if k.lower() in key_word_dic:
 key_word_dic[k.lower()] += v
else:
 key_word_dic[k.lower()] = v
 
word_count_sort = sorted(key_word_dic.items(), key=lambda x: x[1], reverse=True)
 
with open('result.txt', mode='w', encoding='utf-8') as f:
 for y in word_count_sort:
  f.write('{},{}\n'.format(y[0], y[1]))

代碼說明

1、xpath怎么???google瀏覽器支持右鍵直接copy,但是還是建議了解一下xpath相關(guān)語法。

2、把英文單詞統(tǒng)一小寫,避免重復(fù)。

3、按照詞頻倒序排列輸出的,最多次數(shù)的在前面。

驗證結(jié)果

OK,不出意外,java是yyds。

總結(jié)

可以看到最后的統(tǒng)計里面有一些符號,怎么說?可以通過jieba停用詞去掉,看你怎么篩選了。

申明一下,本文案例僅研究探索使用,不是為了惡意攻擊。

如果本文對你有作用的話,請不要吝嗇你的贊,謝謝。

以上就是Python 詳解爬取并統(tǒng)計CSDN全站熱榜標(biāo)題關(guān)鍵詞詞頻流程的詳細(xì)內(nèi)容,更多關(guān)于Python 爬取CSDN的資料請關(guān)注本站其它相關(guān)文章!

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時開通

自選配置、實(shí)時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部