十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Python 的知识很多,基本的入门就有很多东西要学,还有各种合样的库要学习。很多同学学了一段时间,进展很慢,学了前面忘了后面!今天我就给大家介绍一个非常简单的爬虫小例子,来综合练习,非常不错!
作为一家“创意+整合+营销”的成都网站建设机构,我们在业内良好的客户口碑。成都创新互联提供从前期的网站品牌分析策划、网站设计、成都网站建设、成都网站设计、创意表现、网页制作、系统开发以及后续网站营销运营等一系列服务,帮助企业打造创新的互联网品牌经营模式与有效的网络营销方法,创造更大的价值。1.爬取的目标
我们这次选择一个比较好玩的网站叫"好奇心日报",里面的内容非常有趣,而且图片都是高清,非常漂亮,今天我们就探索一下好奇心日报的爬取。
2.准备工作
前期需要对这个网站进行简单的分析,网页的结构,源码的查看,有无反爬策略等等。
1)第一步是发现好奇心日报的文章地址编码是按数字递增的,例如: http://www.qdaily.com/articles/38425.html
2)截止今天,好奇心日报的文章编码已经从1到55613了,共5万篇文章。
3)然后我发现文章的标题,分享数和文章发布日期都写死在页面里,但是评论数不在页面中 。
4)为了找到评论数,我使用谷歌浏览器的F12的 network 功能,发现了评论是通过json 数据获得的,地址类似: http://www.qdaily.com/comments/article/38425/0.json 。
5)看到 json 的数据自带评论,于是我顺便把评论的内容也爬下来了,顺便做一个评论的词云
看个人资料,有Python资料
3.主体代码
1)先创建数据库
数据库我们用选择最最简单的 sqlite3 ,这个数据非常适合小白入门。这个库的详细用法。
用一个类QDaily_DB来专门处理db的创建,保存和关闭.上面的代码是创建部分:
1)创建一个数据库名字叫qdaily.db,里面分布建2张表
2)一张表qdality用来保存好奇心日报的id,标题,点赞分享数,日期和评论数
3)一张表comments用来保存好奇心日报的id和每一条评论的内容
2)网页爬取
网页的爬取,我们这里并没有用什么高深的库和爬虫框架,用简单的requests+bs4的组合,这一个一套比较适合小白上手的库,也没有用并发框架。
1).网页的下载
前面说了,好奇心日报的url的规则已经找到,只要一个一个解析就行!
我们输入一个id,来构造一个url,然后把这个url填入到requests中解析即可。
注意编码方式,获得页面的内容html_content,然后把详细的html_content内容填入parse_html类函数中进行详细处理.
为了防止出现爬取异常,一定要加入try/except和finally这样的异常保护
3).页面的解析和评论内容的获取
下面就是这个项目稍微难有点的地方,需要用BeautifulSoup来详细解析页面的内容。
评论区的内容稍微有一点点的复制,需要用构造一个header取获取,直接解析页面无法获取。
sqlite的操作非常简单,用的也是SQL的语法,上手来说非常方便。我们用insert语句动态插入数据,然后execute去执行,最后不要忘记commit!
05.:数据的展示
爬完5万篇文章用了快一天,虽然多线程可以加快速度,但我采用单线程减轻好奇心日报服务器的压力, 先是根据文章分享数排序:
然后是根据文章的评论数排序:
06:好奇心日报文章id与评论数的关系
感觉好奇心日报用的人越来越多了,那么随着id的增加,文章的平均评论数应该也会增加。
可以看出越到后面,平均每篇文章的分享数就越多,反映出好奇心日报的用户数变多
07:根据评论生成词云
用matplotlib和wordcloud库生成一个词云评论图,看看哪些关键字比较集中!
生成的词云结果如下
发现评论比较多的是"哈哈哈","是的","呵呵","谢谢"这样的短口语词汇。整个这个实战小例子还是非常有趣的,从数据爬取-数据入库,数据分析和词云,一条龙服务,还是非常值得去试试,对初学者强化基础知识,入门比较有帮助。