上篇讲到抓取的数据保存到rawhtml变量中,然后通过编码最终保存到html变量当中,那么html变量还会有什么问题吗?当然会有了,例如可能html变量中的保存的抓取的页面源代码可能有些标签没有关闭标签,例如<div>hello</,这样的错误,那么怎么处理呢?接着看下面的代码:

soup=BeautifulSoup(html)

其中利用模块BeautifulSoap,可能很方便去整理html源文件内容,这里我写了个小例子,大家看一下,代码如下:
html='<html><'
print html
soup =BeautifulSoup(html)
print soup
运行结果:
<html><
<html></html>
至此,一份完整的页面源代码内容保存到变量soap当中,接下来,我们将开始讲解,对soup进行数据分析,先贴出代码如下:
#对soup进行分析
    courseTitle=soup.find(name=]
    courseInfo=soup.find(attrs={ "id""list2"})
    courseTitleInfo=courseInfo.find_all(attrs={"class" :"u-ctitle" })
    courseVideoInfo=courseInfo.find_all(attrs={"class" :"u-cdown" })   
    for content in courseTitleInfo:
        courseCount=courseCount+     
    for link in courseVideoInfo:
        href=link.find(attrs={ "class""downbtn "})
        if type(href)==type(None):
            pass
        else:
            href=link.find(attrs={"class" :"downbtn" }).get("href" )
            videoCount=videoCount+ 
            videoUrl.append(href)
    return courseTitle,courseCount,videoCount,videoUrl      
基本的思路是:先print soup,看一下里面的内容,找到我们感兴趣的内容,然后利用soup的方法,进行分析
(1)先通过soup的find方法,找到title标签,content返回一个list,其中第一项内容为"课程名".
(2)通过soup的find方法找到id为list2的element,里面包含有每节课的标题和视频下载链接地址,分别位于class为u-ctitle与class为u-cdown之中,利用find_all找到相应内容,分别保存在变量courseTitleInfo,courseVideoInfo当中。
(3)通过for循环遍历,获取需要的信息。
特别提示:
(1)编写中可以不断的运行print和type来关注各个变量
(2)find是查找element,find_all是查找所有的element,两者的返回值类型是不同的,find返回值:<class 'bs4.element.Tag'>,find_all返回值:<class 'bs4.element.ResultSet'>,里面的每一个元素为Tag,可以用for来遍历
(3)找到一个具体的tag后,可以通过get获得里面的属性内容,如get('href'),而通过contents可以获取里面的内容,返回的是list
(4)这里没有用到fnmatch模块,这个模块的fnmatch方法也是很有用的,具体讲解如下:
fnmatch.fnmatch(name, pattern)方法:测试name是否匹配pattern,返回true/false
pattern中*匹配任意单一或多个字符,?匹配单一字符
例如fnmatch.fnmatch("hello.mp4","*.mp4")//返回True
(5)对数据的处理是问题的关键,建议大家熟悉BeautifulSoap模块,当然,简单的应用,熟悉find、find_all、get等方法就够了。
好了,数据处理讲解完了,程序的核心功能基本完成,下一篇讲解如何实现图形化界面以及生成exe文件。

(完)

文档信息

手把手教你用python打造网易公开课视频下载软件3-对抓取的数据进行处理的更多相关文章

  1. 手把手教你用python打造网易公开课视频下载软件1-总述

    写作前面的话:最近准备重温一下算法导论,感谢大网易把MIT算法导论课程全部贴出来,地址为:http://v.163.com/special/opencourse/algorithms.html,在线看 ...

  2. 手把手教你用python打造网易公开课视频下载软件4-图形化界面

    上一篇讲解完函数:def getdownLoadInfo (url): 传入公开课的url地址,就可以提取课程的信息,这一篇讲解一下如何编写图像化界面.大概思考一下图像化界面需要的内容: (1)一个标 ...

  3. 手把手教你用python打造网易公开课视频下载软件2-编码相关说明

    函数getdownLoadInfo(url)主要实现核心功能:根据url地址,获取课程信息:课程名(courseTitle),课程数目(courseCount),可下载视频数目(videoCount) ...

  4. 手把手教你用python打造网易公开课视频下载软件5-python生成exe程序

    python程序生成exe文件,使用的是py2exe扩展包,下面写下具体的步骤: 第一步:新建conver2exe.py,内容如下: #coding:utf-8 from distutils.core ...

  5. 【python】10分钟教你用python打造贪吃蛇超详细教程

    10分钟教你用python打造贪吃蛇超详细教程 在家闲着没妹子约, 刚好最近又学了一下python,听说pygame挺好玩的.今天就在家研究一下, 弄了个贪吃蛇出来.希望大家喜欢. 先看程序效果: 0 ...

  6. 手把手教你吧Python应用到实际开发 不再空谈悟法☝☝☝

    手把手教你吧Python应用到实际开发 不再空谈悟法☝☝☝ 想用python做机器学习吗,是不是在为从哪开始挠头?这里我假定你是新手,这篇文章里咱们一起用Python完成第一个机器学习项目.我会手把手 ...

  7. 手把手教你用Python搭建自己的量化回测框架【均值回归策略】

    手把手教你用Python搭建自己的量化回测框架[均值回归策略] 引言 大部分量化策略都可以归类为均值回归与动量策略.事实上,只有当股票价格是均值回归或趋势的,交易策略才能盈利.否则,价格是随机游走的, ...

  8. 手把手教你吧Python应用到实际开发 不再空谈悟法✍✍✍

    手把手教你吧Python应用到实际开发 不再空谈悟法 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问 ...

  9. 手把手教你把Python应用到实际开发 不再空谈语法

    手把手教你把Python应用到实际开发 不再空谈语法 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问 ...

随机推荐

  1. mac端的优秀抓包工具——Charles使用

    http://my.oschina.net/u/2340880/blog/508688 mac端的优秀抓包工具——Charles使用 一.简介 二.安装与使用 三.使用Charles在mac上进行抓包 ...

  2. Laravel 5.x 启动过程分析 [转]

    1.初始化Application 1.1 注册基本绑定 app -> Application实例(Illuminate\Foundation\Application) Illuminate\Co ...

  3. oracle 存储过程 包 【转】

    一.为什么要用存储过程? 如果在应用程序中经常需要执行特定的操作,可以基于这些操作简历一个特定的过程.通过使用过程可以简化客户端程序的开发和维护,而且还能提高客户端程序的运行性能. 二.过程的优点? ...

  4. .net 发展史

    2002年年初 -Visual Studio 2002 & .Net Framework 1.0 2003年春天 -Visual Studio 2003 & .Net Framewor ...

  5. uglifyjs2压缩混淆js文件

    uglifyjs可以用来压缩混淆js文件,发布release版本应用利器.在StackOverflow浏览了一下,相比Google Closure和YUI compressor,uglifyjs被推荐 ...

  6. ORACLE 自动增长通过封装函数,方便调用

    好的编程习惯,是一个很有必要的过程.好的编程习惯,可以因人而异,但是简单地.基本地代码级别的就那些:写注释.合理的缩进.换行.变量命名等. 对我们程序员来说,大部分时间都对着电脑,在对着电脑的大部分时 ...

  7. 解析 Json 相关

    statusJson sj = new statusJson() { ShipmentNum = "555555", Status1 = "05", Wareh ...

  8. 用C语言关于学生管理系统的几种实现方法(一位数组,二维数组,指针,结构体)

    一位数组: #include <stdio.h> #include<string.h> #define N 5 void luru(float s[],int n); void ...

  9. Spring aop 原始的工作原理的理解

    理解完aop的名词解释,继续学习spring aop的工作原理. 首先明确aop到底是什么东西?又如何不违单一原则并实现交叉处理呢? 如果对它的认识只停留在面向切面编程,那就脏了.从oop(Objec ...

  10. vbox 虚拟机共享文件夹 debian

    主机64位windows7 虚拟机Debian 8 64位 注意:在网络更新时,可能需要修改 etc/apt/sources.list 文件,把前几条从CD更新删除掉,这样就会从网络更新 1.vbox ...