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

作者:剑客阿良_ALiang 时间:2021-08-09 19:41:14 

前言

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

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

环境

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

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

分词器:jieba

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

爬虫代码

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

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

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

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

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

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

分享一下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解析。

验证一下

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

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、按照词频倒序排列输出的,最多次数的在前面。

验证结果

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

OK,不出意外,java是yyds。

来源:https://huyi-aliang.blog.csdn.net/article/details/121154001

标签:Python,爬取CSDN,统计词频
0
投稿

猜你喜欢

  • 详细解读Python中的__init__()方法

    2023-03-25 17:10:27
  • python格式的Caffe图片数据均值计算学习

    2022-10-28 07:44:19
  • python引入不同文件夹下的自定义模块方法

    2023-04-24 18:37:22
  • 打分进化史

    2009-12-24 12:20:00
  • python 编码中为什么要写类型注解?

    2022-09-25 22:48:34
  • python中的代码运行时间获取方式

    2023-11-19 22:57:02
  • python实现根据月份和日期得到星座的方法

    2023-02-02 01:05:51
  • Python语言规范之Pylint的详细用法

    2022-11-26 03:12:25
  • 用Python画小女孩放风筝的示例

    2021-11-20 09:40:25
  • Python线性表种的单链表详解

    2022-03-02 07:36:58
  • python pandas 数据排序的几种常用方法

    2021-10-02 06:25:01
  • 新功能的帮助与破坏

    2010-01-17 10:15:00
  • DHTML 打造 Picture Spelling

    2013-08-22 17:01:53
  • Oracle数据库系统使用经验六则

    2010-07-26 13:22:00
  • 基于Python 函数和方法的区别说明

    2023-10-03 02:04:01
  • python+splinter实现12306网站刷票并自动购票流程

    2023-08-02 20:50:18
  • python中的协程深入理解

    2021-05-27 21:47:36
  • Python实现号码归属地查询功能

    2023-09-20 13:31:40
  • python使用正则表达式替换匹配成功的组并输出替换的次数

    2022-04-05 06:35:05
  • ASP代码中的容错机制

    2008-10-19 17:30:00
  • asp之家 网络编程 m.aspxhome.com