想法来源
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')