python爬虫练习5:博客阅读量助手
2017-10-03 18:26
218 查看
目标与环境
爬取csdn博客如“http://blog.csdn.net/nima1994”的文章列表,获取阅读量等,与上次进行比较使用eclipse+pydev编写,win10 64位,python 3.6.2;用到requests,beautifulsoup4,pandas等库。
代码
''' Created on 2017年9月30日 @author: Harry ''' import requests import re from bs4 import BeautifulSoup import pandas as pd import datetime import os #content:文本内容 def analysis(content): b=BeautifulSoup(content,"lxml").select("#article_list > div.article_item") for page in b: url=host+page.select_one("div.article_title > h1 > span > a").attrs['href'] title=page.select_one("div.article_title > h1 > span").get_text().strip() time=page.select_one("div.article_manage > span.link_postdate").get_text() read_count=page.select_one("div.article_manage > span.link_view > a").next_sibling[1:-1] comment=page.select_one("div.article_manage > span.link_comments > a").next_sibling[1:-1] dt=[url,title,time,read_count,comment]; #global datas datas.append(dt) def getData(): r=requests.get(mysite) page=int(re.findall(r"共(.*)页", BeautifulSoup(r.text,"lxml").select_one("#papelist > span").get_text())[0]) analysis(r.text) for i in range(2,page+1): r=requests.get(mysite+"/article/list/"+str(i)) analysis(r.text) def calculation(): df=pd.DataFrame(datas) df_last=pd.read_csv("d:\\temp.csv", encoding = "utf-8") res=[] col=["标题","浏览量","上次浏览量","浏览量增加","新增评论"] s1=0 s2=0 s4=0 for i in range(0,df[0].size): index=list(df_last["0"]).index(df[0][i]) #单条增加 s1+=int(df[3][index]) s2+=int(df_last["3"][index]) des=int(df[3][index])-int(df_last["3"][index]) pinglu=int(df[4][index])-int(df_last["4"][index]) s4+=pinglu if des>0 or pinglu>0: r=[df[1][i],df[3][index],df_last["3"][index],des,pinglu] res.append(r) spd=pd.DataFrame(res,columns=col) print(spd) s3=s1-s2 print("合计") print("总浏览量:%d 上次总浏览量:%d 浏览量增加:%d 评论增加:%d" % (s1,s2,s3,s4)) write2csv() def write2csv(): s=input("是否更新工作表:y?") if(s!="y"): print("未更新,程序已退出:",str(datetime.datetime.now())) return df=pd.DataFrame(datas) df.to_csv("d:\\temp.csv",encoding = "utf-8") print("写入成功:",str(datetime.datetime.now())) datas=[] host="http://blog.csdn.net" mysite="http://blog.csdn.net/nima1994" if __name__ == '__main__': pd.set_option('display.max_rows',None) getData() if(os.path.exists("d:\\temp.csv")==False): df=pd.DataFrame(datas) df.to_csv("d:\\temp.csv",encoding = "utf-8") print("第一次写入,无运行结果,程序退出") exit() calculation()
运行结果
以下文档写于:2018年03月07日 17:32:00
由于csdn博客升级,爬虫部分变量更改,简略代码如下:
import requests import re from bs4 import BeautifulSoup #content:文本内容 def analysis(content): b=BeautifulSoup(content,"lxml").select("#article_list > div.article_item") for page in b: url=page.select_one(".article_title .link_title a").attrs['href'] title=page.select_one(".article_title .link_title").get_text().strip() time=page.select_one(".link_postdate").get_text() read_count=str(page.select_one(".link_view").get_text()).strip()[3:-1] comment=str(page.select_one(".link_comments a").next_sibling).strip()[1:-1] dt=[url,title,time,read_count,comment]; #global datas print(dt) datas.append(dt) def getData(): r=requests.get(mysite) analysis(r.text) while(True): rp = BeautifulSoup(r.text, 'lxml').select("#papelist > div > nav > ul > li") q = re.search(r'href="(.*?)".*?rel="(.*?)"', str(rp[len(rp) - 1])) if q==None: break r=requests.get(q.group(1)) analysis(r.text) datas=[] host="http://blog.csdn.net" mysite="http://blog.csdn.net/nima1994" if __name__ == '__main__': getData() # for i in datas: # print(i)
相关文章推荐
- cas服务器源码阅读笔记,对标博客
- SVM推荐阅读文献及博客
- iOS 阅读唐巧博客心得
- 博客周刊深度阅读之“Ruby与Java争锋”
- 博客目录 分类: 其他 2014-07-16 22:58 371人阅读 评论(0) 收藏
- 如何高效地阅读技术类书籍与博客
- 自动检测CSDN博客文章阅读次数的爬虫
- 阅读鸟哥的风雪之隅PHP博客的笔记(1)
- 我看过的关于职业规划最好最全面的一篇文章(因为在另外一个人博客中他转载的字体太大了颜色太鲜艳不适宜阅读,所以就自己转载了)
- HTFGather4 CSDN、博客园 ChinaUnix.net 论坛博客 阅读加速器
- 我的博客网站开发3——博客首页功能实现之各排行版(阅读数,评论数,推荐数)的数据绑定
- 火狐扩展:CSDN 博客页面自动 “阅读全文”
- 如何高效地阅读技术类书籍与博客
- 采访往届师兄及阅读博客感想
- 博客前言(请务必阅读)
- C++ 记录学习过程中一些值得多次阅读的博客文章
- 提高博客阅读体验的六种技巧
- 构建之法第四章阅读博客
- 第一次阅读“博客”之---读后感
- 使用LAMP创建基于wordpress的个从博客网站 分类: B3_LINUX 2014-07-15 16:45 800人阅读 评论(0) 收藏