最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年11月10日 10:32:32   作者:劍客阿良_ALiang  
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Python爬取CSDN全站綜合熱榜標(biāo)題,順便統(tǒng)計(jì)關(guān)鍵詞詞頻,大家可以在過程中查缺補(bǔ)漏,提升水平

前言

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

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

環(huán)境

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

頁(yè)面爬取使用chromedriver,至于原因我后面會(huì)說(shuō)。

分詞器:jieba

爬取頁(yè)面地址:https://blog.csdn.net/rank/list

爬蟲代碼

這里說(shuō)一下為什么沒有用requests直接獲取頁(yè)面源碼,主要是因?yàn)樵擁?yè)面并不能直接請(qǐng)求出源碼。而是通過頁(yè)面滾動(dòng)到最下方,才可以顯示出全部的100個(gè)排名的文章。

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

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

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

簡(jiǎn)單說(shuō)明一下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
 
# =============================================================================
# 爬取動(dòng)態(tài)下滑加載網(wǎng)頁(yè)
# =============================================================================
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

代碼說(shuō)明

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

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

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

驗(yàn)證一下

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

關(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

代碼說(shuō)明

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

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

主程序代碼

主程序主要是將源碼中的標(biāo)題,使用lxml進(jìn)行元素提取,獲取標(biāo)題。然后詞頻統(tǒng)計(jì)后輸出結(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]))

代碼說(shuō)明

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

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

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

驗(yàn)證結(jié)果

OK,不出意外,java是yyds。

總結(jié)

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

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

如果本文對(duì)你有作用的話,請(qǐng)不要吝嗇你的贊,謝謝。

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

相關(guān)文章

  • Django中的用戶身份驗(yàn)證示例詳解

    Django中的用戶身份驗(yàn)證示例詳解

    這篇文章主要給大家介紹了關(guān)于Django中用戶身份驗(yàn)證的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SQL Django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python全棧之線程詳解

    Python全棧之線程詳解

    這篇文章主要為大家介紹了Python全棧之線程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • 一文搞懂Python中is和==的區(qū)別

    一文搞懂Python中is和==的區(qū)別

    is和==都是對(duì)對(duì)象進(jìn)行比較判斷作用的,但對(duì)對(duì)象比較判斷的內(nèi)容并不相同,下面來(lái)看看具體區(qū)別在哪?對(duì)Python中is和==的區(qū)別感興趣的朋友跟隨小編一起看看吧
    2023-01-01
  • Python列表reverse()函數(shù)使用方法詳解

    Python列表reverse()函數(shù)使用方法詳解

    這篇文章主要詳細(xì)介紹了Python列表reverse()函數(shù)使用方法,文章通過代碼示例講解的非常詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-07-07
  • python調(diào)用chrome實(shí)現(xiàn)網(wǎng)頁(yè)自動(dòng)操作過程

    python調(diào)用chrome實(shí)現(xiàn)網(wǎng)頁(yè)自動(dòng)操作過程

    這篇文章主要介紹了python調(diào)用chrome實(shí)現(xiàn)網(wǎng)頁(yè)自動(dòng)操作,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • Python基于opencv的簡(jiǎn)單圖像輪廓形狀識(shí)別(全網(wǎng)最簡(jiǎn)單最少代碼)

    Python基于opencv的簡(jiǎn)單圖像輪廓形狀識(shí)別(全網(wǎng)最簡(jiǎn)單最少代碼)

    這篇文章主要介紹了基于opencv的簡(jiǎn)單圖像輪廓形狀識(shí)別(全網(wǎng)最簡(jiǎn)單最少代碼),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Python實(shí)現(xiàn)的遠(yuǎn)程登錄windows系統(tǒng)功能示例

    Python實(shí)現(xiàn)的遠(yuǎn)程登錄windows系統(tǒng)功能示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的遠(yuǎn)程登錄windows系統(tǒng)功能,結(jié)合實(shí)例形式分析了Python基于wmi模塊的遠(yuǎn)程連接與進(jìn)程操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-06-06
  • Python?gRPC流式通信協(xié)議詳細(xì)講解

    Python?gRPC流式通信協(xié)議詳細(xì)講解

    這篇文章主要介紹了Python?gRPC流式通信協(xié)議,最近幾天在搞golang的grpc,跑通之后想用php作為客戶端調(diào)用一下grpc服務(wù),結(jié)果拉了,一個(gè)php的grpc服務(wù)安裝,搞了好幾天,總算搞定了
    2022-11-11
  • matplotlib?3D模型繪制一朵小紅花

    matplotlib?3D模型繪制一朵小紅花

    這篇文章主要介紹了matplotlib?3D模型繪制一朵小紅花,代碼有趣也有一定的知識(shí)參考價(jià)值,需要的朋友可以參考文章內(nèi)容下去試試
    2022-02-02
  • Pandas數(shù)據(jù)集的分塊讀取的實(shí)現(xiàn)

    Pandas數(shù)據(jù)集的分塊讀取的實(shí)現(xiàn)

    本文主要介紹了Pandas數(shù)據(jù)集的分塊讀取的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評(píng)論

辽源市| 勐海县| 江北区| 治县。| 中宁县| 保亭| 迁西县| 罗田县| 成都市| 治县。| 双城市| 阿克苏市| 盘山县| 安溪县| 嘉义市| 通州市| 崇礼县| 偃师市| 集贤县| 洮南市| 盐城市| 泾川县| 仁化县| 张家界市| 固镇县| 泗洪县| 开封县| 富平县| 三明市| 湖南省| 天门市| 吐鲁番市| 渭源县| 黄龙县| 龙里县| 绵竹市| 广丰县| 裕民县| 陇川县| 大城县| 休宁县|