Python爬虫-博客园首页推荐博客排行(整合词云+邮件发送)

1.前提:

总体思路,利用多线程(mutiSpider)爬取博客园首页推荐博客,根据用户名爬取该用户的阅读排行榜(TopViewPosts),评论排行榜(TopFeedbackPosts),推荐排行榜(TopDiggPosts),然后对得到的数据进行处理(合并目录),再进行基本排序(这里我们已阅读排行榜为例),排序阅读最多的文章,然后利用词云(wordcloud)生成图片,最后发送邮件给自己。(有兴趣的小伙伴可以部署到服务器上!)

  1.1参考链接:

大神博客:https://www.cnblogs.com/lovesoo/p/7780957.html(推荐先看这个,我是在此博客基础上进行改进与扩充了的)

词云下载:https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud(我下载的这个wordcloud-1.5.0-cp36-cp36m-win32.whl)

邮件发送:https://www.runoob.com/python/python-email.html(菜鸟教程推荐)

 1.2实现效果:

2.环境配置:

 python3.6.5(对应cp36,最好记住这个,因为以后下载一些whl文件都会用到)

  pycharm + QQ邮箱授权码 + wordcloud-1.5.0-cp36-cp36m-win32.whl

  win10,64位(虽然我是64位,但是下载词云win_amd64.whl不兼容,改成win32.whl就兼容了)

2.0 读者需要提供的东西:

  1.词云所需要的图片(我是avatar.jpg)与电脑字体(具体见View_wordcloud函数

  2.邮箱的SMTP授权码(密码就是授权码)

  3.默认所有代码、图片等都在同一文件夹下面。

)

2.1需要导入的库(词云 + 邮件 + 爬虫)

 注:1.requests,beatuifulsoup,是爬虫需要,wordcloud,jieba,是词云需要,smtplib,email是邮件需要,其余都是些基本Python语法

2.安装wordcloud词云的时候容易报错,官方链接,官网下载然后在本地cmd下pip install 即可。

3.编写爬虫

3.1博客园首页推荐博客

  选中XHR,找到https://www.cnblogs.com/aggsite/UserStats,直接requests获取,返回的是html格式

 

然后可以需要对数据进行基本处理,一种是使用Beautiful Soup解析Html内容,另外一种是使用正则表达式筛选内容。

  其中BeautifulSoup解析时,我们使用的是CSS选择器.select方法,查找id="blogger_list" > ul >li下的所有a标签元素,同时对结果进行处理,去除了"更多推荐博客"及""博客列表(按积分)链接。

使用正则表达式筛选也是同理:我们首先构造了符合条件的正则表达式,然后使用re.findall找出所有元素,同时对结果进行处理,去除了"更多推荐博客"及""博客列表(按积分)链接。

这样我们就完成了第一步,获取了首页推荐博客列表。


然后,这里就能获取推荐用户的博客了,我们接下来需要进入某个用户博客,找到接口sidecolumn.aspx,这个接口返回了我们需要的信息:随笔分类,点击Headers查看接口调用信息,可以看到这也是一个GET类型接口,路径含有博客用户名,且传入参数blogApp=用户名:查看Header:

https://www.cnblogs.com/meditation5201314/mvc/blog/sidecolumn.aspx?blogApp=meditation5201314,直接发送requests请求即可

 

到此,便可以获得博客的分类目录及文章数量信息,其余2个我就不展示了,总共3个功能,获取用户的阅读排行榜(TopViewPosts),评论排行榜(TopFeedbackPosts),推荐排行榜(TopDiggPosts),具体见推荐博客另外多线程爬虫代码也在这里面,比较简单,然后就是对数据进行排序处理了。见如下代码

具体完整代码

4.生成词云

 对推荐博客内容进行处理(List格式),有关词云具体使用可以百度,简单介绍就是在给定的img和txt生成图片,就是把2者结合起来,font_path是自己电脑本机上的,去C盘下面搜一下就行,不一定大家都一样。

  注:词云安装:这个比较复杂,我在pycharm下面install 没安装好,我是先去官网下载了whl文件,然后在cmd下

pip install  wordcloud-1.5.0-cp36-cp36m-win32.whl

然后把生成的文件夹重新放入到pycharm的venv/Lib/site_packages/下面,然后就弄好了(个人推荐这种办法,百试不爽!)

 

在上面代码中,我们利用cloud.to_file(path.join(bmppath, 'temp.jpg')),保存了temp.jpg,所以后面发送的图片就直接默认是temp.jpg了

  5.发送邮件:

  去QQ邮箱申请一下授权码,然后发送给自己就好了,内容嵌套img这个教麻烦,我查了很久,需要用cid指定一下,有点像ajax和format。

最终完整代码:

总结:总体功能就是根据推荐博客,爬取推荐用户的阅读排行榜 评论排行榜 推荐排行榜,然后数据处理成,将处理好的数据整合成词云,最后发送给用户

 难点1:爬取用户和博客所用到的一系列爬虫知识(正则,解析等等)

 难点2:词云的安装(确实挺麻烦的。。。。。)

 难点3:邮件发送内容嵌套image(菜鸟教程没有给出QQ邮箱内嵌套图片,自己去官网找的。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值