上篇讲到抓取的数据保存到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. html中 table 和 form的位置

    对于web前端开发来说  经常会用到 像firebug这样审查元素 工具 发现了一个这样的现象: 当 able><form><tr>....</tr>< ...

  2. 【温故Delphi】Win32API之CreateMutex

    解决问题 如何让一个软件在一台机器上只能运行一个实例呢?这个问题用专业术语就是进程互斥.这个问题可以通过CreateMutex来解决. 进程互斥的核心思想:进程在启动时首先检查是否存在此进程实例,如果 ...

  3. 【转】Beanstalkd 队列简易使用

    Beanstalkd一个高性能分布式内存队列系统   之前在微博上调查过大家正在使用的分布式内存队列系统,反馈有Memcacheq,Fqueue, RabbitMQ, Beanstalkd以及link ...

  4. Caring for our seniors

    We all have our own journeys to make. And I have been thought that our journeys define us. Some jour ...

  5. GIS 网站参考

    www.TimeGIS.com 开源GISOpen Source Geospatial Foundation http://osgeo.org/index.htmlMapServer — UMN Ma ...

  6. AD6.8_mcu123 分享地址

    http://yunpan.cn/Qi3WrPPzEC2hI  访问密码 c07d

  7. node的事件模块应用(译)

    第一次接触Node.js时,就觉得他只不过是用javascript实现的服务端.但实际上他提供了许多浏览器端不具备的方法,比如EventEmitter类.我们在本文中来学习如何使用EventEmitt ...

  8. oracle中用户删除不了,ORA-01940提示 “无法删除当前已连接用户”

    Oracle删除用户的提示无法删除当前已连接用户两种解决方法如下: 1.先锁定用户.然后查询进程号,最后删除对应的进程.在删除对应的用户 SQL>alter user XXX account l ...

  9. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  10. java.util.zip.ZipException: invalid entry size 解决办法

    启动maven项目时报java.util.zip.ZipException: invalid entry size (expected 7612 but got 5955 bytes) 可能是mave ...