上篇讲到抓取的数据保存到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. RTP在。net中的使用(资料)

    开源组件:lumisoft 网址:http://www.lumisoft.ee/lswww/download/downloads/Examples/ 非开源的免费组建:rtp.net (微软推荐)

  2. TYVJ博弈论

    一些比较水的博弈论...(为什么都没有用到那什么SG呢....) TYVJ 1140  飘飘乎居士拯救MM 题解: 歌德巴赫猜想 #include <cmath> #include < ...

  3. 如何写出优雅兼备可读性的javascript代码

    即或是最简单的需求,不同的程序员也会写出不一样的代码: 需求:充值程序过虑不符合条件的充值金额,即只能充入100.200.500.1000金额,其它过虑: 1.菜鸟程序员可能会这样写,虽然可读性强,代 ...

  4. 判断是否是有效的IPV4地址

    参考链接: https://blogs.msdn.microsoft.com/oldnewthing/20060522-08/?p=31113 http://www.cnblogs.com/txw19 ...

  5. springboot使用之四:错误页面404处理建议

    每个项目可能都会遇到404,403,500等错误代码,如没有错误页面,则会给用户一个很不友好的界面,springboot项目同样也存在这个问题. 但在官方文档并没有相关配置信息,这就要求我们自己来实现 ...

  6. 关于“线程间操作无效: 从不是创建控件’textBox1‘的线程访问它”异常的解决方法

    线程间操作无效: 从不是创建控件“textBox1”的线程访问它 背景:通过一个辅助线程计算出的一个值赋给textBox1.text;解决办法:1.直接在窗体的构造函数中加:System.Window ...

  7. 使用Fragment的两种方式:<fragment>与<FrameLayout>

    Android中使用Fragment的两种方式:<fragment>与<FrameLayout> 1.静态使用:自定义类,继承Fragment,在xml中使用<fragm ...

  8. selenium support

      org.openqa.selenium.support.ui.Select select = new org.openqa.selenium.support.ui.Select(driver.fi ...

  9. foremost

    foremost 恢复单个类型文件 删除一个 USB(/dev/sdba1)存储器中一个 png 文件然后使用 formost 恢复. #rm -f /dev/sdb1/1.png #foremost ...

  10. java-android推送

    之前做的推送,考虑了很多,最后因为各个因素,选择了极光的.