而这次要抓的信息里面,许多 数据项都是 JS 的,无法直接用 BeautifulSoup 直接抓取到,所以我们要使用更强大的库和工具来应对 JS。

首先介绍一下我们今天要用到的工具:

Python想必已经不用我介绍了,这里选用Python3是因为它对中文的支持更加强大;

PhantomJS可以理解成是一个模拟的浏览器,在你输入网址后跟真正的浏览器一样,执行页面上的JS语句生成我们看到的页面;

selenium用来读取PhantomJS解析出来的页面。

安装PhantomJS

PhantomJS的安装十分简单,去官网(http://phantomjs.org/)下载回来最新版的PhantomJS,然后随便找个地方解压缩就好了。

解压缩后如图:

如何自动发每日数据邮件-新乡seo|网站优化,网站建设_微信公众号:zeropython—昊天博客

打开bin文件夹,我们会看到我们要用的phantomjs.exe文件,请记住这个文件的路径

如何自动发每日数据邮件-新乡seo|网站优化,网站建设_微信公众号:zeropython—昊天博客

安装selenium

selenium是Python的一个库,所以它可以通过pip安装,只要在命令行输入:

就可以完成安装啦!如下图:

第一步:简单的动态网页抓取

首先,我们要抓取报表中的各项数据,包括:云课堂销量、优酷播放量、腾讯播放量、知乎点赞量。

直接上代码(复制的时候注意不要复制上行号哦):

下面我们来逐行讲解每行代码的意思:

第一行:

导入selenium库中的webdriver

第二行:

导入Python的内建库——time。time主要实现与时间有关的功能。

第三行:

这行的格式是:

即我们指定调用PhantomJS来解析网页。

第四行:

这行的格式是:

显然,这行的功能是使用PhantomJS来解析我们指定的网址,这里网址使用网易云课堂上我们爬虫课的网址。

第五行:

这行的格式是:

使用time函数推迟调用线程的运行,可以理解成使程序暂停若干秒。在这里我们使用它的目的是确保上一步网页加载完成

第六行:

这一行的格式是:

这一行用于在PhantomJS解析出来的网页上查找我们需要的内容,这里我选用的是find_element_by_class_name()的方法,即通过class的名称来查找元素,而提供的方法还有很多,常见的有:

find_element_by_id()通过ID来查找

find_element_by_css_selector()通过CSS选择器查找

find_element_by_xpath()通过xpath查找

find_element_by_link_text()通过连接文字查找

find_element_by_tag_name()通过tag的名称查找

有了查找方法,那我们如何获取想查找的内容呢?

用IE浏览器打开我们的目标网址,这里使用http://study.163.com/course/courseMain.htm?courseId=1002810012。

在我们想抓取的内容上(这里用课程销量)点鼠标右键,选“检查元素”,如图:

如何自动发每日数据邮件-新乡seo|网站优化,网站建设_微信公众号:zeropython—昊天博客

然后就会出现DOM资源管理器,并且自动定位到我们想抓取的内容所在位置上。
如图:

如何自动发每日数据邮件-新乡seo|网站优化,网站建设_微信公众号:zeropython—昊天博客

可以看到,上图的两个箭头处,我们既可以通过第一个箭头位置的ID进行查找,也可以通过第二个箭头处的class名称查找。

第七行、第八行、第九行:

这三行用于整理我们抓取到的数据,使用的方法是字符串的分段,在之前的教程中我们已经讲过了。

第十行

在程序结束后,退出,否则会在后台一直占用系统性能的。

第十一行

程序运行一下,结果为:
如何自动发每日数据邮件-新乡seo|网站优化,网站建设_微信公众号:zeropython—昊天博客
(使用的IDE是Pycharm)

显然,我们成功的完成了动态内容的抓取。

刚才的演示是云课堂的销量,其他的数据爬取,比如:优酷播放量、腾讯播放量、知乎点赞量等等也是类似的,就不重复说明了。

第二步:发送邮件

每天晚上12点,把数据自动发邮件汇报,这个也交给程序来自动运行,就不用熬夜刷数据了。

代码如下:

这里应用到了 python 的内建库:email 和 smtplib,通过 email 构建邮件,通过 smtplib 发送邮件。

这段代码只要套用就好,不做详细解释。

重点说一下三个地方:

1、邮箱密码:比如QQ和163邮箱,这里输入的并不是你的邮箱密码,而是“授权码”,在邮箱设置中可以查询到。

2、发信邮箱的smtp服务器:搜索一下很容易找到,一般类似smtp.qq.com

3、smtp端口:通常为25,但QQ邮箱为465,请根据实际情况修改,也很容易搜索到。

第三步:完整代码

注意:最后发邮件部分的代码,需要根据你自己的信息来填写替换。

第四步:自动运行

保存python文件为report.py

windows系统下:

进入命令提示符cmd
Win7及以下:使用at命令

(Win8、Win10使用 SCHTASKS   命令)

linux系统下:

修改时区:

设置NTP服务器

显示时间,检查是否正确

每天 0:00,用Python执行/root/report.py文件。
编辑定时任务:

保存,退出
执行

重启服务才能使用

到了这里,所有代码就都完成啦!开始享受程序为你工作的感觉吧~