上篇讲到抓取的数据保存到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. CAD 二次开发--属性块

    1.属性块的定义 属性块是有构成的实体和附加信息(属性)组成的,属性块中块的定义与简单块中块的定义一样,而属性的定义主要是通过属性的AttributeDefinition类的有关属性和函数来实现的.具 ...

  2. Linux系统简介

    1.操作系统包括 系统调用.内核. Linux 也就是系统调用和内核那两层,当然直观的来看,我们使用的操作系统还包含一些在 其上运行的应用程序,比如文本编辑器,浏览器,电子邮件. 2.Linux 本身 ...

  3. IE全屏浏览代码

    以前做过一个网络版的商场导购触摸屏系统,用ASP写的,就是要在运行的时候全屏浏览而不能出现标题栏.工具栏.状态栏等.解决方法是用JS弹出全屏窗口,建立html文件,代码如下: <script l ...

  4. textField设置输入文字距左边的距离

    1.设置tetxField的内边距 [self.yourTextField setValue:[NSNumber numberWithInt:5] forKey:@"paddingTop&q ...

  5. Ubuntu 16.04 启动错误 "a start job is running for hold until boot process finishes up"

    老司机也差点翻船... 升级16.04的时候,将默认启动管理器(default display manager)选为gm3(gnome3)了(应该使用默认的lightgm)如果改成gm3,好像是nvi ...

  6. JavaScript-事件周期-点击替换颜色

    事件周期 DOM:3个阶段 1.捕获:从最外层元素,向内层元素,逐个记录绑定的事件处理函数.默认,暂不触发任何事件 2.目标触发:优先触发目标元素绑定的事件处理函数 目标元素:实际点击的元素 3.冒泡 ...

  7. 第十四章:降维:奇异值分解SVD

  8. sqlserver和oracle的递归查询

    1.sqlserver递归查询方式 CTE: if OBJECT_ID('tb','N') is not null   drop table tb;     create table tb(id va ...

  9. easyui 》 radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中

    获取一组radio被选中项的值var item = $('input[@name=items][@checked]').val();获取select被选中项的文本var item = $(" ...

  10. PADSPCB权威指南-第一章 PADS软件系统(部分)(原创)

    PADSPCB权威指南-第一章(部分)豆丁地址:http://www.docin.com/p-707128286.html