一、撕开爬虫的面纱——爬虫是什么,它能做什么

爬虫是什么

爬虫就是一段能够从互联网上高效获取数据的程序。

我们每天都在从互联网上获取数据。当打开浏览器访问百度的时候,我们就从百度的服务器获取数据,当拿起手机在线听歌的时候,我们就从某个app的服务器上获取数据。简单的归纳,这些过程都可以描述为:我们提交一个Request请求,服务器会返回一个Response数据,应用根据Response来渲染页面,给我们展示数据结果。

爬虫最核心的也是这个过程,提交Requests——〉接受Response。就这样,很简单,当我们在浏览器里打开一个页面,看到页面内容的时候,我们就可以说这个页面被我们采集到了。

只不过当我们真正进行数据爬取时,一般会需要采集大量的页面,这就需要提交许多的Requests,需要接受许多的Response。数量大了之后,就会涉及到一些比较复杂的处理,比如并发的,比如请求序列,比如去重,比如链接跟踪,比如数据存储,等等。于是,随着问题的延伸和扩展,爬虫就成为了一个相对独立的技术门类。

但它的本质就是对一系列网络请求和网络响应的处理。

爬虫能做什么

爬虫的作用和目的只有一个,获取网络数据。我们知道,互联网是个数据的海洋,大量的信息漂浮在其中,想把这些资源收归己用,爬虫是最常用的方式。特别是最近几年大树据挖掘技术和机器学习以及知识图谱等技术的兴盛,更是对数据提出了更大的需求。另外也有很多互联网创业公司,在起步初期自身积累数据较少的时候,也会通过爬虫快速获取数据起步。

二、python爬虫框架scrapy——爬虫开发的利器

如果你刚刚接触爬虫的概念,我建议你暂时不要使用scrapy框架。或者更宽泛的说,如果你刚刚接触某一个技术门类,我都不建议你直接使用框架,因为框架是对许多基础技术细节的高级抽象,如果你不了解底层实现原理就直接用框架多半会让你云里雾里迷迷糊糊。

在入门爬虫之初,看scrapy的文档,你会觉得“太复杂了”。当你使用urllib或者Requests开发一个python的爬虫脚本,并逐个去解决了请求头封装、访问并发、队列去重、数据清洗等等问题之后,再回过头来学习scrapy,你会觉得它如此简洁优美,它能节省你大量的时间,它会为一些常见的问题提供成熟的解决方案。

scrapy数据流程图

这张图是对scrapy框架的经典描述,一时看不懂没有关系,用一段时间再回来看。或者把本文读完再回来看。

在一些书上会把爬虫的基本抓取流程概括为UR2IM,意思是数据爬取的过程是围绕URL、Request(请求)、Response(响应)、Item(数据项)、MoreUrl(更多的Url)展开的。上图的绿色箭头 体现的正是这几个要素的流转过程。图中涉及的四个模块正是用于处理这几类对象的:

Spider模块:负责生成Request对象、解析Response对象、输出Item对象

Scheduler模块:负责对Request对象的调度

Downloader模块:负责发送Request请求,接收Response响应

ItemPipleline模块:负责数据的处理

scrapy Engine负责模块间的通信

各个模块和scrapy引擎之间可以添加一层或多层中间件,负责对出入该模块的UR2IM对象进行处理。

scrapy的安装

参考官方文档,不再赘述。官方文档:https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/install.html

三、scrapy实战:50行代码爬取全站短视频

python的优雅之处在于能够让开发者专注于业务逻辑,花更少的时间在枯燥的代码编写调试上。scrapy无疑完美诠释了这一精神。

开发爬虫的一般步骤是:

确定要爬取的数据(item)

找到数据所在页面的url

找到页面间的链接关系,确定如何跟踪(follow)页面

那么,我们一步一步来。

既然是使用scrapy框架,我们先创建项目:

1scrapy startproject DFVideo

紧接着,我们创建一个爬虫:

scrapy genspider -t crawl DfVideoSpider eastday.com

这是我们发现在当前目录下已经自动生成了一个目录:DFVideo

目录下包括如图文件:

spiders文件夹下,自动生成了名为DfVideoSpider.py的文件。

爬虫项目创建之后,我们来确定需要爬取的数据。在items.py中编辑:

接下来,我们需要确定视频源的url,这是很关键的一步。

现在许多的视频播放页面是把视频链接隐藏起来的,这就使得大家无法通过右键另存为,防止了视频别随意下载。

但是只要视频在页面上播放了,那么必然是要和视频源产生数据交互的,所以只要稍微抓下包就能够发现玄机。

这里我们使用fiddler抓包分析。

发现其视频播放页的链接类似于:video.eastday.com/a/180926221513827264568.html?index3lbt

视频源的数据链接类似于:mvpc.eastday.com/vyule/20180415/20180415213714776507147_1_06400360.mp4

有了这两个链接,工作就完成了大半:

在DfVideoSpider.py中编辑

至此,一个简单但强大的爬虫便完成了。

如果你希望将视频的附加数据保存在数据库,可以在pipeline.py中进行相应的操作,比如存入mongodb中:

当然,你需要在setting.py中将pipelines打开:

四、执行结果展示

视频文件:

五、最后

今天讲了爬虫的一些基础的概念,不深也不透,主要是通过一个案例给大家一个直观的认识。

利用scrapy,短短50行代码下载整站短视频相关推荐

  1. python爬虫实战:利用scrapy,短短50行代码下载整站短视频

    近日,有朋友向我求助一件小事儿,他在一个短视频app上看到一个好玩儿的段子,想下载下来,可死活找不到下载的方法.这忙我得帮,少不得就抓包分析了一下这个app,找到了视频的下载链接,帮他解决了这个小问题 ...

  2. 如何用50行代码构建情感分类器

    选自Toward Data Science,作者:Rohith Gandhi,机器之心编译. 本文介绍了如何构建情感分类器,从介绍自然语言处理开始,一步一步讲述构建过程. 自然语言处理简介 语言把人类 ...

  3. 转:目标50行代码之内完成3d编辑器功能

    1024程序员节刚过,手痒想实现一个html的3d编辑器,看了three.js  同时还看了网上流传已久的<<基于 HTML5 Canvas 的简易 2D 3D 编辑器>>,都 ...

  4. 简易爬虫--50行代码获取英雄联盟全英雄皮肤

    50行代码搞定英雄联盟LOL全英雄皮肤下载 # 下载英雄联盟全英雄皮肤 import os import requestsdef downloadPic(heroIds, titles, names, ...

  5. python实现50行代码_50行代码实现python计算器主要功能

    实现功能:计算带有括号和四则运算的式子 3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4) 基本思路:使用正则表达式提取出每一层小括 ...

  6. pyquery获取不到网页完整源代码_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...

    爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网 前言 上篇文章 PyQuery (一) 回顾.今天来介绍具体 PyQuery 的使用方法. 穷游网目标与分析 开始之前,按照之前的套路一步 ...

  7. 【PyTorch】50行代码实现GAN——PyTorch

    本文来源于PyTorch中文网. 一直想了解GAN到底是个什么东西,却一直没能腾出时间来认真研究,前几日正好搜到一篇关于PyTorch实现GAN训练的文章,特将学习记录如下,本文主要包含两个部分:GA ...

  8. python跑酷游戏源码_HTML5游戏实战(1):50行代码实现正面跑酷游戏

    前段时间看到一个"熊来了"的HTML5跑酷游戏,它是一个典型的正面2D跑酷游戏,这里借用它来介绍一下用Gamebuilder+CanTK开发正面跑酷游戏的基本方法. CanTK(C ...

  9. 50行代码实现的艺术签名设计微信小程序,轻松对接公众号,涨粉神器,学习赚钱两不误.微信公众号引流工具.html,python学习小项目.艺术签名设计微信小程序,前端学习小项目有趣的项目

    50行代码实现的艺术签名设计微信小程序,轻松对接公众号,涨粉神器,学习赚钱两不误 先看效果 这个小程序实现艺术签名设计的功能 对接到公众号之后,相当于给你的公众号添加了一个功能,别人关注公众号后,可以 ...

最新文章

  1. 分别用BFS和DFS求给定的矩阵中“块”的个数
  2. iis7.5配置.net mvc注意事项
  3. 信息安全研究之数据安全专题
  4. 各版本arm-gcc区别与安装
  5. STM32开发 -- CRC校验码
  6. SessionStorage 和 LocalStorage 生命周期 以及 浏览器刷新操作意味着什么?
  7. 撩课-Python-每天5道面试题-第2天
  8. 信息收集 ——C段扫描
  9. 多米诺骨牌v.1MEL语言
  10. thinkphp mysql 中文 问号_thinkphp分页中文参数乱码解决
  11. 企业管理系统前后端分离架构设计 系列一 权限模型篇
  12. 面向对象六大原则----imageLoader为例层层优化
  13. pyqt4安装问题小结(一)
  14. TP5.0Composer安装phpQuery
  15. POJ 3764 DFS+trie树
  16. 对音频信号作短时傅里叶变换(STFT)/小波变换处理(python + matlab)
  17. 天敏G10数位板安装完PS无压感,观看此教程
  18. 【Google Play】Google Play 签名维护 ( 签名机制 | Google Play 签名机制选择 | 签名更新 )
  19. Android—传感器-距离传感器(ProximitySensor)
  20. QT多线程之:moveToThread

热门文章

  1. Python自动化小技巧06——任意图片做出二维码
  2. 11.11即将到来,华为云学院精品课程免费推荐奉上
  3. Flutter开发(十七):Flutter首页导航的框架
  4. 软件工程专业的“乐趣“
  5. 渗透测试-sqlmap绕过WAF脚本编写
  6. fcn_101代码理解
  7. Maya 2013下载地址 包含32位 64位 及Mac版
  8. 小程序的冒泡事件和非冒泡事件
  9. 塔防游戏的技术总结--行为树
  10. 基于STC89C52单片机的远程控制系统