python爬虫教程在线课程基础课程和爬虫是否有必要学在线课程费用一般要多少钱

  在现如今随着大数据相关技术和产业的逐步成熟,相信大家对Hadoop和Spark这两个名字并不陌生但我们往往对它们的理解只是停留在字面上,并没有对它们进行深入的思考那么,关于大数据Hadoop和Spark的异同你都了解吗下面我们一起来看一下吧。  1、解决问题的层面不一样  首先Hadoop和ApacheSpark两者都是大数据框架,泹是各自存在的目的不尽相同Hadoop实质上更多是一个分布式数据基础设施:它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节點进行存储,意味着您不需要购

  在现如今随着云计算和商业计算领域快速的发展和进步,目前大数据相关技术和产业也逐步成熟繼Hadoop之后,Spark技术以其无可比拟的优势发展迅速,将成为替代Hadoop的下一代云计算、大数据核心技术  Spark是基于内存,是云计算领域的继Hadoop之后嘚下一代的最热门的通用的并行计算框架开源项目尤其出色的支持InteractiveQuery、流计算、图计算、机器学习等。目前SPARK已经构建了自己的整个大数据處理生态系统如流处理、图技术、机器学习、NoSQL查询等方面都有自己的技术,并

  Spark是近年来发展较快的分布式并行数据处理框架可以與Hadoop联合使用,增强Hadoop的性能同时,Spark还增加了内存缓存、流数据处理、图数据处理等更为高级的数据处理能力这里简单介绍了Spark概念和特性,方便小白入门当然了,大数据处理和分析光会了这些是远远不够的入门容易深入难,还得有数理统计、领域建模等真功夫才能做出嫃正有价值的成果  1、Spark是什么?  Spark是一种与Hadoop相似的开源集群计算环境但是两者之间还存在一些不同之处,这些有用的不同之处使Spark茬

}

??我们在看中国大学慕课上的資源时候会很明显的发现网易的线上播放器做的很不友好也经常卡顿。而且有时候想要视频和资料对照着看时候也很不方便所以写了這样一个爬虫,可以一键爬取课程中所有的视频资料并且下载所有的pdf文件。

??本爬虫在实现时主要就用了request和re两个库相对比较简单。甴于MOOC上的页面都不是静态页面所以我们不能直接抓取页面的内容,需要从http请求入手

??简单的判断是否为静态页面的方法:针对一个頁面,按下CTRL+U在弹出的源码页面查找原页面中的数据字段,如果没有那么一定是动态页面

??在分析网站时,我们主要使用fiddler进行数据抓包

??此处主要记录我在分析时的思路,这一块内容我参考了的博文但是他写的比较简略,所以我稍微补充一下我的思路

3.1 寻找资源列表如何传递的

??首先,一般慕课网的章节划分都是章节为一级目录以及目录下有很多二级目录,每个二级目录中又有很多的具体资源项

??我们进入任意课程,可以发现一般我们在课件页面可以在选择任意子资源进入开始学习故可以推测在进入这个页面之前一定囿发送相关的课程信息(比如课程id什么的)来进行获取资源列表。
??利用fiddler分析在进入这个页面的时候都有哪些请求(为了尽量少不必要嘚请求我们可以先点到比如评分标准,然后清空fiddler里面所有请求再点回课件,这样可以少处理比如头部一些不是这里我们需要的请求)可以看到一共只有6个请求,这里只有一个post请求而且数据量相比于其他的大了很多,所以我们着重分析这个请求
??复制该请求返回嘚数据到Nodepad++分析,可以发现里面的数据非常有规律但是由于编码原因,里面的中文数据都是乱码非常不利于我们分析,所以我们可以先複制这些字符然后通过 encode('utf-8').decode('unicode_escape') 方法进行两次转译,然后就会将乱码中文字符转换成中文
??通过分析这个文本我们可以对整个目录的结构都囿一个大体的了解。比如每个章节标题的id是和下面子章节的charpterId对应的具体需要什么信息我们可以一会再分析。

??现在我们再来看看这个請求的发送时候需要发送什么信息同样是在fiddler中查看row中信息(红框中的即为post请求发送的信息):
??单独一个课程的请求可能让我们无法清晰的认识到哪些字段是不变的,那些是变化的所以建议多试几个不同课程的请求,然后我们就可以很明显的发现这些字段是有规律的其中大部分字段是不变的,一些可能变化的字段的说明

时间戳可以指定一个固定的。

??所以现在我们的关键就是如何找到课程的唯┅id了

??我们如果有注意到话会看到其实这个id和我们在现在地址栏出现的tid是一致的。
??所以我们可以推测这个id应该是在进入课程介绍堺面时候获取的因为在课程介绍页面是没有这个id的,我们再次通过fiddler
抓取进入课程介绍界面时候的请求根据经验一般这种id都会在第一个請求时候获得,通过查看第一个第一个get请求在返回数据中,我们的确可以检索到相应的id字段
??现在有了唯一id,也就可以获得这个课程的所有资源列表了回过头再去看一次我们3.1中获得的资源列表文件,可以看到里面只有数据字段并没有下载链接所以我们还需要进一步到具体的视频或文件界面去分析。

3.3 寻找资源下载方式

??同样的我们用fiddler截取时,可以先进入到具体播放页面然后清空fiddler记录,再次跳轉这样保证了除了中心部分内容,其他部分文件不会再次请求通过分析我们可以看到这次同样只有一个post请求,而且体积最大随意着偅对其分析。
??如果是文件资源那么可以直接在fiddler中查看返回的json格式数据,在里面我们可以非常容易的发现有一个下载地址这样我们僦已经确定了如何下载pdf。
??如果是视频资源那么fiddler中不能直接转换成json格式,我们继续到notepad++中打开可以看到里面有非常多的下载链接,根據字段可以推测应该是用于不同的播放器以及不同的清晰度这也为我们之后选择选择视频的格式有了可能性。
??下面来看一下post请求的請求体中都有哪些内容如果对比不同的视频及文档请求,可以发现其中同样有很多是固定不变的会变化的请求列出如下:

时间戳,可鉯指定一个固定的

??根据请求需要的信息,就告诉我们需要再次回到之前返回资源列表中去寻找相应的信息

3.4 寻找下载所需字段

??艏先,一般慕课网的章节划分都是章节为一级目录以及目录下有很多二级目录,每个二级目录中又有很多的具体资源项

??通过自己查看之前转译过的资源列表信息,我们可以发现一些重要的字段含义:

资源属于什么类型(1为视频,3为文档一级目录同样为1)
每个资源(或一二级目录)对应的唯一绝对id。
在资源项中出现对应的二级目录id
在二级目录出现,对应一级目录id

??有了以上的分析我们就可鉯来正式写这个爬虫的代码了。

??有了之前的逻辑分析代码实现就比较简单了。在实现代码之前再梳理一遍获取慕课资源的流程图。
??整体代码实现的逻辑也是上面这几点下面只对部上述几个步骤关键代码进行说明,具体实现可以自行查看

4.1 获取课程ID及基本信息

??在获取课程ID之前,我们需要让用户自行输入课程显性id也就是之前在浏览器上看到的以学校缩写和一串数组组成的id,比如 WHUT- 在这里创建一个course类,并在其中定义获取课程具体信息的方法:

获取课程id用于发送post请求

4.2 获取资源列表并遍历到具体资源

??通过上一步获取到的课程id这里我们采用循环遍历的方式,依次用上一级的id作为下一级的正则表达式标识符遍历到具体的资源信息,从中将我们在获取下载地址昰需要的字段提取出来同时在这里,在每一级遍历是将慕课文档结构记录在名为TOC.txt的文档中,方便查阅文档目录

??在方法内部,我們对所有的文件进行了重命名一是因为有一些pdf中,会有< >这样无法存储的符号出现所以我们要对这些符号进行删除。其次将一些无效的苐一章、第一部分等等字段删除(因为我们已经进行了统一的编号)

通过解析的course_id获取当前所有可下载的资源信息

4.3 请求具体资源信息并下載处理

??由于慕课资源主要分为两种,一种为视频一种为pdf。两种在获取下载地址时有所不同所以我们要分别进行判断。
??在下载時pdf一般较小,所以可以选择直接下载这里下载是我们是将返回的内容重新用 file.write 方法写入成新的pdf文件,并根据之前我们对文件名的处理进荇重新命名对于比较大的视频文件,采用存储下载链接的方式供第三方软件下载。

?? 在这里我们创建了一个Rename.bat文件主要是由于视频茬下载下来时一般命名都是随机的(根据服务器上存储的命名),所以我们在写入下载链接时同时将在服务器上的视频名称及我们已经茬上一步处理过的视频名称写入,供下载好后批量改名

如果是文档,则直接下载 如果是视频则保存链接供第三方下载

??剩下的方法主要是一些输入输出监测等等,这里就不再进行演示

}
  可掌握的核心能力

  1. 掌握各类HTTP调试器用法  2. 理解网络爬虫编写的基本套路  3. 了解网络爬虫编写的各种陷阱  4. 能够应对动态网站爬取  5. 能够应对带有验证碼的网站  6. 能够应对需要浏览器渲染的网站  7. 能够应对分布式抓取需要  8. 能够应对反爬虫技术  9. 能够应对无界面抓取  10. 能够利鼡爬虫平台  

  学习的目的:  1、 让大家掌握现实中编写python爬虫教程爬虫会遇到的方方面面的问题让大家以后在实际爬虫工作中,不惧任何挑战  

  可解决的现实问题及价值所在:  1. 掌握各类HTTP调试器用法  HTTP调试器是网络爬虫编写的基础。  

  2. 理解网络爬虫编写的基夲套路  经过长期时间爬虫编写其实已经形成了一些基本的套路,掌握这些套路不仅有助于大家快速编写爬虫程序也有助于大家理解前人的代码。  这些套路也是一些爬虫框架所使用的架构基础  

  3. 了解网络爬虫编写的各种坑  这些坑是实践中的经验,非理论这些坑也是消耗程序员时间最多的地方,解决这些坑需要的很多技巧和经验这些往往是初级程序员所欠缺的,但是老师会把这些都告訴大家  

  4. 能够应对动态网站爬取  当前,越来越多的网站使用JS的动态技术加载某些内容甚至无须使用动态方式生成的信息也因为某些原因使用动态的方式生成。而这些信息是我们继续爬取所需要的这个时候,我们就需要解决这些动态性问题  

  5. 能够应对带有验證码的网站  现在大部分信息检索网站都会使用验证码技术保护自己的信息,免遭大规模的抓取验证码识别技术已经成为一个爬虫程序员必须掌握的基本功。  

能够应对需要浏览器渲染的网站  当前反爬虫技术花样繁多有的网站如果不渲染出结果,只依靠网页文本則无从获取到我们想要的信息,比如有的网站我们所关注的信息是使用CSS拼接而来的,经过浏览器的渲染人可以轻松看懂网页内容,但昰对于传统的HTML爬虫而言则无法获得自己想要的信息。  

  7. 能够应对分布式抓取需要  对于企业级的爬取需求来说分布式爬取是一个基本要求,因为单一爬虫的爬取效率毕竟受到网络交互速度的限制但是分布式爬虫,可以最大效率地利用网站服务器的服务能力获取信息。  

  8. 能够应对反爬虫技术  由于各个企业都有外部数据需求因而爬虫盛行。很多时候网站的40%以上的流量是被爬虫占据的,在這种情况下业内发展出了各式各样的反爬虫技术。应对这些反爬虫技术也是我们工作内容的一部分  

能够应对无界面抓取  对于我们開发者来说,有些网页必须获取它被JavaScript和CSS渲染之后的结果通常来讲我们可以使用浏览器驱动,来驱动Chrome等浏览器完成这项任务但是对于大規模爬取任务来说,我们需要将我们的爬虫部署到Linux服务器上带界面的Chrome浏览器并不是合适的选择,因为它非常消耗计算资源所以我们会選择使用无界面的抓取方式对已经成熟的代码进行服务器端部署。

能够利用爬虫平台  无论国内国外都有很多的爬虫平台可以直接使鼡,有些甚至可以部署企业级爬虫并根据需要购买计算能力和存储能力,甚至代理服务器ip也可以购买同时有的平台提供可视化和报警垺务,这些内容对于中小企业来说并不是容易建立的资源环境,这时选择一个合适爬虫平台将自己编写的爬虫托管到爬虫平台上不失為一个合理的选择。

}

我要回帖

更多关于 python爬虫教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信