项目实战!爬取5万篇好奇心日报文章,适合小白练手的实战案例!

Python的知识很多,基本的入门就有很多东西要学,还有各种合样的库要学习。很多同学学了一段时间,进展很慢,学了前面忘了后面!要么就是揠苗助长找一些特别难的例子,结果太难了,失去信心,完全没有成就感!

个人建议是学Python应该趣味性结合,如果跟自己平时的工作相关的应用更好,如果没有,找到合适的例子,通俗有趣的例子非常重要。今天我就给大家介绍一个非常简单的爬虫小例子,来综合练习,非常不错!

要点:

  • 练习基本的入门知识
  • 练习Python类的使用
  • 练习爬虫的最简单使用
  • 练习最简单的数据库的使用

01:爬取的目标

我们这次选择一个比较好玩的网站叫"好奇心日报",我经常访问这个网站,里面的内容非常惬意。尤其是在星巴克喝点咖啡,拿IPad看看文章,感觉很好。里面的内容非常有趣,而且图片都是高清,非常漂亮,今天我们就探索一下好奇心日报的爬取。

02:准备工作

前期需要对这个网站进行简单的分析,网页的结构,源码的查看,有无反爬策略等等。

  • 第一步是发现好奇心日报的文章地址编码是按数字递增的,例如:http://www.qdaily.com/articles/38425.html
  • 截止今天,好奇心日报的文章编码已经从1到55613了,共5万篇文章。
  • 然后我发现文章的标题,分享数和文章发布日期都写死在页面里,但是评论数不在页面中 。
  • 为了找到评论数,我使用谷歌浏览器的F12的network功能,发现了评论是通过json数据获得的,地址类似:http://www.qdaily.com/comments/article/38425/0.json 。
  • 看到json的数据自带评论,于是我顺便把评论的内容也爬下来了,顺便做一个评论的词云

03:主体代码

1).先创建数据库

数据库我们用选择最最简单的sqlite3,这个数据非常适合小白入门。这个库的详细用法。

用一个类QDaily_DB来专门处理db的创建,保存和关闭.上面的代码是创建部分:

  • 创建一个数据库名字叫qdaily.db,里面分布建2张表
  • 一张表qdality用来保存好奇心日报的id,标题,点赞分享数,日期和评论数
  • 一张表comments用来保存好奇心日报的id和每一条评论的内容

2).网页爬取

网页的爬取,我们这里并没有用什么高深的库和爬虫框架,用简单的requests+bs4的组合,这一个一套比较适合小白上手的库,也没有用并发框架。

1).网页的下载

前面说了,好奇心日报的url的规则已经找到,只要一个一个解析就行!

  • 我们输入一个id,来构造一个url,然后把这个url填入到requests中解析即可。
  • 注意编码方式,获得页面的内容html_content,然后把详细的html_content内容填入parse_html类函数中进行详细处理.
  • 为了防止出现爬取异常,一定要加入try/except和finally这样的异常保护

3).页面的解析和评论内容的获取

下面就是这个项目稍微难有点的地方,需要用BeautifulSoup来详细解析页面的内容。

评论区的内容稍微有一点点的复制,需要用构造一个header取获取,直接解析页面无法获取。

我们用两个简单数据结构,一个是primary_data这个可以是列表,元组或者字典,这是一种数据结构,用来保存我们爬取获得每一篇文章的id,日期,标题等等。另外一个是 comments_data用来存放评论区的内容,然后返回即可。

04:数据存入数据库

在学习中有迷茫不知如何学习的朋友小编推荐一个学Python的学习裙【639584010】无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

前面我们有一个类QDaily_DB,用了创建的类函数,现在用它的save_db函数来把数据入库。

sqlite的操作非常简单,用的也是SQL的语法,上手来说非常方便。我们用insert语句动态插入数据,然后execute去执行,最后不要忘记commit!

05.:数据的展示

爬完5万篇文章用了快一天,虽然多线程可以加快速度,但我采用单线程减轻好奇心日报服务器的压力, 先是根据文章分享数排序:

然后是根据文章的评论数排序:

06:好奇心日报文章id与评论数的关系

感觉好奇心日报用的人越来越多了,那么随着id的增加,文章的平均评论数应该也会增加。

可以看出越到后面,平均每篇文章的分享数就越多,反映出好奇心日报的用户数变多

07:根据评论生成词云

用matplotlib和wordcloud库生成一个词云评论图,看看哪些关键字比较集中!

生成的词云结果如下

发现评论比较多的是"哈哈哈","是的","呵呵","谢谢"这样的短口语词汇。整个这个实战小例子还是非常有趣的,从数据爬取-数据入库,数据分析和词云,一条龙服务,还是非常值得去试试,对初学者强化基础知识,入门比较有帮助。

原文地址:http://blog.51cto.com/13719825/2152066

时间: 2024-10-26 23:36:20

项目实战!爬取5万篇好奇心日报文章,适合小白练手的实战案例!的相关文章

java客房管理小项目,适合小白练手

java客房管理小项目这个客房管理小项目,适合java初学者练手.功能虽然不多,但是内容很齐全!喜欢这样文章的可以关注我,我会持续更新,你们的关注是我更新的动力!需要更多java学习资料的也可以私信我!共有5层,每层10间客房,以数字101--509标示:具有入住,退房,搜索,退出四个简单功能:public class Hotel {static final int floor = 5;static final int order = 10;private static int countFlo

python爬取数据并保存到数据库中(第一次练手完整代码)

1.首先,下载需要的模块requests, BeautifulSoup, datetime, pymysql(注意,因为我用的python3.7,不支持mysqldb了),具体的下载方法有pip下载,或者使用Anaconda版本python的童鞋可以使用conda下载. 2.创建conndb,py,包含数据库的连接断开,增删改查等操作: #!/usr/bin/env python # -*- coding:utf-8 -*- import pymysql def conn_db(): # 连接数

网络爬虫+HtmlAgilityPack+windows服务从博客园爬取20万博文

网络爬虫+HtmlAgilityPack+windows服务从博客园爬取20万博文 1.前言 最新在公司做一个项目,需要一些文章类的数据,当时就想到了用网络爬虫去一些技术性的网站爬一些,当然我经常去的就是博客园,于是就有下面的这篇文章. 2.准备工作 我需要把我从博客园爬取的数据,保存起来,最好的方式当然是保存到数据库中去了,好了我们先建一个数据库,在来一张表,保存我们的数据,其实都很简单的了啊,如下图所示 BlogArticleId博文自增ID,BlogTitle博文标题,BlogUrl博文地

第三百三十节,web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号

第三百三十节,web爬虫讲解2-urllib库爬虫-实战爬取搜狗微信公众号 封装模块 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib from urllib import request import json import random import re import urllib.error def hq_html(hq_url): """ hq_html()封装的爬虫函数,自动启用了用户代理和ip

九 web爬虫讲解2—urllib库爬虫—实战爬取搜狗微信公众号—抓包软件安装Fiddler4讲解

封装模块 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib from urllib import request import json import random import re import urllib.error def hq_html(hq_url): """ hq_html()封装的爬虫函数,自动启用了用户代理和ip代理 接收一个参数url,要爬取页面的url,返回html源码 "

使用selenium + Chrome爬取某网站乌云公开漏洞文章并保存为pdf文件

目的:使用selenium + Chrome爬取某网站指定类型的乌云公开漏洞文章,即在win10终端输入漏洞类型(如未授权),则爬取所有该类型的漏洞文章,并把每个分页的数字作为文件夹名,来保存该分页下面的所有的漏洞文章. 总结:本例只是能简单的爬取某一类型漏洞的所有文章,但不能爬取多个类型漏洞的所有文章,有时可能会有一些小bug导致没爬取完就崩溃,需要手工修改进而重新爬.其它问题解决看注释. 关于python代码里面出现中文在windows里面的处理,还没完全掌握.可参考Python for W

基于python爬虫项目,爬取某网站电子书,实战项目

1.主要反扒机制2.爬虫失败机制3.分析机制4.暂停续点爬取机制5.如需合作,请加我qq752477168,或者私信6.项目效果图 原文地址:https://blog.51cto.com/12119115/2453310

Python爬虫新手教程:爬取了6574篇文章,告诉你产品经理在看什么!

作为互联网界的两个对立的物种,产品汪与程序猿似乎就像一对天生的死对头:但是在产品开发链条上紧密合作的双方,只有通力合作,才能更好地推动项目发展.那么产品经理平日里面都在看那些文章呢?我们程序猿该如何投其所好呢?我爬取了人人都是产品经理栏目下的所有文章,看看产品经理都喜欢看什么. 1. 分析背景 1.1. 为什么选择「人人都是产品经理」 人人都是产品经理是以产品经理.运营为核心的学习.交流.分享平台,集媒体.培训.招聘.社群为一体,全方位服务产品人和运营人,成立8年举办在线讲座500+期,线下分享

使用TaskManager爬取2万条代理IP实现自动投票功能

话说某天心血来潮想到一个问题,朋友圈里面经常有人发投票链接,让帮忙给XX投票,以前呢会很自觉打开链接帮忙投一票.可是这种事做多了就会考虑能不能使用工具来进行投票呢,身为一名程序猿决定研究解决这个问题.于是有了以下思考 1.是否能一个人投多票,如果不行又是什么限制了一人投多票? 答:投票网站限制了一个IP或者一个用户只能投一票,防止恶意刷票行为 2.如果是一个IP一票那是否代表着多个IP就能投多票了呢? 答:答案是肯定的 3.用什么方法能够在代码里面改变自己请求的IP? 答:HTTP请求的时候设置