上篇讲到抓取的数据保存到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. android源码环境下用mmm/mm编译模块,输出编译log到文件的方法

    android源码环境下用mmm/mm编译模块,输出编译log到文件的方法 1,在android目录下直接用mmm命令编译, log信息保存在android目录下 mmm packages/apps/ ...

  2. 关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其他位数)

    关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其... 方法一:使用to_char的fm格式,即: to_char(round(data.amount,2),'FM9999 ...

  3. Oracle统计函数之Lead

    一,Lead 语法及例子 Lead函数是十分的好用的一个函数.它的语法如下图: 简单地说,lead是个奇特函数,在允许不使用自连接的情况下,一次返回多行. 参数说明: value_expr 值表达式, ...

  4. sharedpreferences的简单使用

    sharedpreferences 以键值对的方式将数据保存在xml   创建:SharePreferences sp = getShareferences(name,context.---) con ...

  5. .net 微信分享功能

    微信在国内目前无疑是最火的社交软件,智能手机装机必备. 微信api有java,php,Python语言的demo, 为毛没有C#的范例?兄长今天给各位带来一个.不叫哥(割)了,A股今天又暴跌[3912 ...

  6. log4j向oracle中插入一条系统当前时间的sql语句

    配置log4j,要向oracle插入一条系统当前时间的sql语句,按网上查找的总是出现各种各样的报错,最后总结出的写法是: ### shezhi### log4j.rootLogger = debug ...

  7. JavaWeb 命名规则

    命名规范命名规范命名规范命名规范 本规范主要针对java开发制定的规范项目命名项目命名项目命名项目命名 项目创建,名称所有字母均小写,组合方式为:com.company.projectName.com ...

  8. ORA-00060:等待资源时检测到死锁的一种处理方法

    先执行脚本: SELECT p.sipid, a.serial#, c.object_name, b.session_id, b.oracle_username, b.os_user_name FRO ...

  9. [原] XAF 如何啟用ListView橫向滾動條

    using System; using DevExpress.ExpressApp; using DevExpress.ExpressApp.Win.Editors; using DevExpress ...

  10. 套题 codeforces 361

    A题((Mike and Cellphone) 看起来好像需要模拟数字键位的运动,可是,只要判断出那些必然YES的数字组合不就好了么 #include <cstdio> #include ...