爬取CSDN博客文章,统计文章历史数据

想法来源

CSDN作品数据里面只能查看一星期或者一个月的文章数据
在这里插入图片描述但是我想查看我所有文章从开始至今的所有数据,大概如下效果
在这里插入图片描述
将所有信息统计后,生成excel表格
然后就可以在表格进行各种统计,查看,比如按照访问量排名之类的

网页分析

目标是爬取

  • 文章标题
  • 地址
  • 点赞数
  • 评论数
  • 收藏数
  • 阅读数

CSDN个人页面是下拉刷新的,所以使用selenium
个人页面源代码不能获取收藏数
在这里插入图片描述收藏数需要进入具体文章爬取
在这里插入图片描述

标签直接使用谷歌自带工具就可以进行爬取,就不进行分析了

代码

from selenium import webdriver
from time import sleep
from lxml import etree
import os
import requests
import re
import random
import xlwt
if __name__ == "__main__":

    #创建工作簿
    f = xlwt.Workbook() 
    sheet1 = f.add_sheet(u'博客信息统计',cell_overwrite_ok=True)
    rowTitle = [u'文章',u'链接',u'阅读数',u'点赞数',u'评论数',u'收藏数']
    for i in range(0,len(rowTitle)):
        sheet1.write(0,i,rowTitle[i]) 
    
    headers = {
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
    }        
    bro = webdriver.Chrome(executable_path='E:/chromedriver_win32/chromedriver.exe')    
    bro.get('https://blog.csdn.net/weixin_41413511?spm=1011.2124.3001.5343')

    #向下拉14次页面,这个值根据你想下载多少自己设定
    bro.execute_script('window.scrollTo(0,(document.body.scrollHeight)/2)')   #每次下滑一个窗口距离
    for i in range(1,12):
        sleep(2)#留个时间  刷新下图片,不要太快
        bro.execute_script('window.scrollTo(0,(document.body.scrollHeight))')   #每次下滑一个窗口距离
    sleep(1)
    
    #获取标签数据
    page_text = bro.page_source
    tree = etree.HTML(page_text)
    li_list = tree.xpath('//*[@id="floor-user-profile_485"]/div/div[2]/div/div[2]/div/div[2]/div/div/div')  
    for li in li_list:
        url_list=li.xpath('//article/a/@href')
        article_title=li.xpath('//div[1]/h4/text()')
        view_num=li.xpath('//span[@class="view-num"]/text()')
        comment_num=li.xpath('//div[3]/div[1]/div[3]/span/text()')
        give_like_num=li.xpath('//div[3]/div[1]/div[4]/span/text()')
    
    get_collection_list=[]
    cnt=0#统计下载进度
    total=len(article_title)#统计下载文件数目
    for url in url_list:
        response = requests.get(url=url,headers=headers).text
        tree = etree.HTML(response)
        get_collection_text=tree.xpath('//*[@id="get-collection"]/text()')[0]
        get_collection=re.match("\n\s+(\d+)\n.*",get_collection_text).group(1)
        get_collection_list.append(get_collection)
        cnt=cnt+1
        print(cnt,"/",total)
        #设置随机时间,这样比较不容易被封锁IP
        a=random.uniform(0.5,1.5)
        sleep(a)


    for i in range(0,total):
        #print(article_title[i],url_list[i],view_num[i],give_like_num[i],comment_num[i],get_collection_list[i])
        sheet1.write(i+1,0,article_title[i]) #文章
        sheet1.write(i+1,1,url_list[i]) #链接
        sheet1.write(i+1,2,int(view_num[i]))#阅读
        sheet1.write(i+1,3,int(give_like_num[i]))#点赞
        sheet1.write(i+1,4,int(comment_num[i]))#评论
        sheet1.write(i+1,5,int(get_collection_list[i]))#评论
        
    f.save('F:/write_excel.xls')    
  
      

其他

将爬取数据放入Excel
Python中产生随机数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王蒟蒻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值