Python 详解爬取并统计CSDN全站热榜标题关键词词频流程

 更新时间:2021年11月10日 10:32:32   作者:剑客阿良_ALiang  
读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Python爬取CSDN全站综合热榜标题,顺便统计关键词词频,大家可以在过程中查缺补漏,提升水平

前言

最近在出差,发现住的宾馆居然有小强。所以出差无聊之际,写了点爬虫的代码玩玩,问就是应景。本篇文章主要是爬取CSDN全站综合热榜的100个标题,然后分词提取关键词,统计一下词频。

我想了下,对于其他博主还是有用的,可以看看什么标题可以上热榜,就分享一下吧。顺便把我解决各类问题的方法,说一说。

环境

使用的IDE为:spyder(有看着界面不习惯的,忍一下,不关键)

页面爬取使用chromedriver,至于原因我后面会说。

分词器:jieba

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

爬虫代码

这里说一下为什么没有用requests直接获取页面源码,主要是因为该页面并不能直接请求出源码。而是通过页面滚动到最下方,才可以显示出全部的100个排名的文章。

所以我的思路是,使用chromedriver,然后执行js实现滚动页面到最下方。

这里需要说明一下chromedriver的下载,需要根据你google浏览器的版本来。我的笔记本事mac,可以点击左上角的Chrome,再点击关于Google Chrome看看自己的浏览器版本。

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

简单说明一下driver的原理,就是模拟浏览器打开url的操作,就像我们手点一样,具体原理改天可以再聊聊。

不废话了,上爬虫工具代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Nov  4 17:15:06 2021
@author: huyi
"""
 
from selenium import webdriver
import time
 
# =============================================================================
# 爬取动态下滑加载网页
# =============================================================================
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、根据你的网络条件,里面的超时时间你可以调整。避免还没有滚动到最下面就结束了,因为我宾馆的网比较卡,所以设置的比较大。

3、返回页面源码,为了后面的xpath解析。

验证一下

OK,已经拿到了页面源码了。

关键词提取代码

我们把关键词提取的方法也准备一下。不废话,上代码。

#!/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、简单说明一下,方法取的是权重最高的3个词,可以按照你的喜欢调整。

2、把相同的词做一个计数,方便把100的标题关键词词频统计用。

主程序代码

主程序主要是将源码中的标题,使用lxml进行元素提取,获取标题。然后词频统计后输出结果文本。

不废话,上代码。

#!/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("//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相关语法。

2、把英文单词统一小写,避免重复。

3、按照词频倒序排列输出的,最多次数的在前面。

验证结果

OK,不出意外,java是yyds。

总结

可以看到最后的统计里面有一些符号,怎么说?可以通过jieba停用词去掉,看你怎么筛选了。

申明一下,本文案例仅研究探索使用,不是为了恶意攻击。

如果本文对你有作用的话,请不要吝啬你的赞,谢谢。

以上就是Python 详解爬取并统计CSDN全站热榜标题关键词词频流程的详细内容,更多关于Python 爬取CSDN的资料请关注脚本之家其它相关文章!

相关文章

  • Django中的用户身份验证示例详解

    Django中的用户身份验证示例详解

    这篇文章主要给大家介绍了关于Django中用户身份验证的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用SQL Django具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Python全栈之线程详解

    Python全栈之线程详解

    这篇文章主要为大家介绍了Python全栈之线程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • 一文搞懂Python中is和==的区别

    一文搞懂Python中is和==的区别

    is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同,下面来看看具体区别在哪?对Python中is和==的区别感兴趣的朋友跟随小编一起看看吧
    2023-01-01
  • Python列表reverse()函数使用方法详解

    Python列表reverse()函数使用方法详解

    这篇文章主要详细介绍了Python列表reverse()函数使用方法,文章通过代码示例讲解的非常详细,对我们的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-07-07
  • python调用chrome实现网页自动操作过程

    python调用chrome实现网页自动操作过程

    这篇文章主要介绍了python调用chrome实现网页自动操作,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)

    Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)

    这篇文章主要介绍了基于opencv的简单图像轮廓形状识别(全网最简单最少代码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Python实现的远程登录windows系统功能示例

    Python实现的远程登录windows系统功能示例

    这篇文章主要介绍了Python实现的远程登录windows系统功能,结合实例形式分析了Python基于wmi模块的远程连接与进程操作相关实现技巧,需要的朋友可以参考下
    2018-06-06
  • Python gRPC流式通信协议详细讲解

    Python gRPC流式通信协议详细讲解

    这篇文章主要介绍了Python gRPC流式通信协议,最近几天在搞golang的grpc,跑通之后想用php作为客户端调用一下grpc服务,结果拉了,一个php的grpc服务安装,搞了好几天,总算搞定了
    2022-11-11
  • matplotlib 3D模型绘制一朵小红花

    matplotlib 3D模型绘制一朵小红花

    这篇文章主要介绍了matplotlib 3D模型绘制一朵小红花,代码有趣也有一定的知识参考价值,需要的朋友可以参考文章内容下去试试
    2022-02-02
  • Pandas数据集的分块读取的实现

    Pandas数据集的分块读取的实现

    本文主要介绍了Pandas数据集的分块读取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08

最新评论