课程准备工作
虚拟机—Vmware/Virtualbox _ ubuntu操作系统
开发:windows系统进行开发
ubuntu操作系统运行爬虫程序
技术准备:
PYTHON面相对象的程序设计开发
HTML网页(设计)开发
CSS了解即可
JavaScript熟悉
其他需要掌握的爬虫技术
所有编程语言都是相通的!
主要内容
爬虫概述:了解什么是爬虫
爬虫优势:知道爬虫用在什么地方
爬虫实现方式:了解实现爬虫用到的各种技术
爬虫的分类:了解爬虫工作相关的一些(不同爬虫)区别
第一个操作程序:采集新浪社区新闻首页数据
爬虫请求操作:伪造请求[技术实现]
爬虫请求操作:模仿用户行为[社会工程学]
爬虫请求操作:请求隐藏[代理]
课程内容
软件安装
python2.7开发环境
pycharm开发工具
虚拟环境:virtualenv
每个项目一个独立的虚拟环境
方便项目部署时收集开发环境中的模块:pip freeze>pkg.list
什么是爬虫[爬虫概述]
爬虫:Spider
爬虫-> 蚂蚁下载软件 | 迅雷下载| ..
小脚本程序,从网络上采集要下载的数据的资源->完成高速下载
爬虫-> 度娘、谷哥..搜索引擎
搜索引擎-> 采集数据的程序-> 从网络上搜索数据提供给搜索引擎使用
百度-> 关键词-> 包含该关键词的所有网页
公司|企业数据进行深度分析-> 数据挖掘-> 大数据-> 大量的数据处理
大量的数据从哪里来?
数据的重要性
软件:用来解决生活中的问题!
解决生活中的问题,核心思想?
核心:处理数据!
操作:增删改查[CRUD]
数据从哪里来?
数据:都是从生活中来的!
生活中的数据,怎么到自己需要的地方[数据库]
手工采集:可以采集数据,但是操作效率低下
内部数据:公司内部数据,权限范围内尽情使用!:数据有限、较强的针对性
数据交易:数据采集迅速、费用较高;-- 数据不能定制化!
爬虫采集:定向数据采集;成本较高、数据定制化很强、数据针对性很强
搜索引擎:不是我们的重点!
定向爬虫:我们工作的重点!-- 开启了保护和反保护的斗争
爬虫[采集数据]和反爬虫[防止恶意采集数据]
2. 爬虫的采集方式——分类
通用爬虫:一般用在搜索引擎中:针对所有数据进行广泛采集[广度]
搜索引擎作为爬虫~必须遵守爬虫采集数据的约定协议
民间组织约定的爬虫采集数据协议:ROBOT协议
爬虫:好的一面~可以将自己的网站让更多的人通过搜索引擎访问~网络流量分流
ROBOT协议:是一种约定的规范;针对通用爬虫进行的数据采集限制
聚焦爬虫:也成为定向爬虫,针对目标数据进行定向数据采集[深度]
每个数据采集任务,都可能要开发一套新的项目 :程序开发密集度
数据采集定向采集[在不违反中华人民共和国宪法的前提下]可以针对任何数据进行采集(一般正规的公司安排的数据采集任务基本都是合法的->公司承担责任):数据定向性
技能要求:上手快,入门简单,对数据的分析要求较高!
工作的重点:聚焦爬虫;工作的核心:采集数据;
PS:爬虫~是通过程序的方式,自动采集数据;程序操作比自然人的操作效率高出很多很多倍;所以如果一旦通过无限制的爬虫对网站发起请求,[爬虫的频繁请求让服务器资源迅速消耗,最终导致服务器内存不存或者其他后果!],网站很容易DDOS
DDOS[拒绝服务攻击]
3. 关于历史数据的处理
百度搜索-> 爬虫采集了网络中的大部分网站的数据-> 其他人通过搜索网站,可以直接在搜索页面中进入指定的网站
PS:某个网站进行了更新,百度以前搜索到的页面数据变化了!数据不一致~
百度爬虫对原来采集过的数据要实时进行更新
增量爬虫:需要实时对历史采集数据进行更新[历史数据会发生变化]
股票数据采集-> 采集了过去10年每一个交易日的股票历史数据,方便对未来的数据进行分析处理
PS:需要对历史数据进行更新吗?
累积爬虫:历史数据不会发生变化,一旦数据执行完成,数据就是固定的
程序开发:第一个爬虫程序
开发环境:python2.7
开发工具:pycharm
python2和python3区别
编码:Python2使用的是ascii编码;python3使用的是unicode编码
UTF-8 -> unicode trasfer format 8bit 主持中文
ascii -> 不支持中文-> ANSI->扩展ANSI->..
表示英文->1个字符->2个字节->16位
表示汉字->2个字符->4个字节->32位->国家标准编码GB2312->GBK->GB18030
英文-中文,编码方式可能不同,就会造成乱码的问题!
解决乱码的问题-> 不论什么字符->转换成字节->按照指定的编码转换成字符
开始开发:
python2使用的是ascii编码,所以源代码文件都不支持中文
源代码代码中第一行的位置,添加支持中文的注释
# -*- coding:utf-8 -*-
# coding:utf-8
# ..
为什么要使用python2
python主要的版本1.x,2.x,3.x
目前web市场主流版本:3.x[网站开发-文本字符数据的交互,配合二进制文件的处理,更多的会使用到的比较通用的unicode字符]
爬虫工作主流版本:2.x[都是从网络上采集数据,采集的数据文本数据、二进制数据,为了方便并且统一的进行采集数据的处理,使用python2操作更加灵活]Python2在爬虫方向支持的第三方模块更多!
程序开发
采集到新浪网网页数据
有用?采集首页中各个模块的链接地址和名称,方便进行该模块二次数据采集
没用?其他数据~不需要
采集网页的源代码,为什么要用爬虫程序?鼠标右键查看源代码可以完成!
为什么要用爬虫{爬虫的优势?!}
有那么多的工具[迅雷、旋风、百度云、整站下载工具等等],为什么要用爬虫!
最近上映了妇联3->要看这部电影,怎么办?--下载工具
最近要看一本小说->[阴阳师]-> 怎么办?--搜索引擎-搜索资源-下载工具
要获取某个网站上的大部分电商商品[名称、价格、描述]->怎么办-爬虫程序自动采集
要获取多个新闻网站上,最近1个月的所有新闻数据[标题、发布时间、编辑人、内容]->怎么办——爬虫程序自动采集
爬虫程序—发送请求给服务器,获取服务器的数据
爬虫程序~发送的请求什么样的?Spider Request
浏览器程序~发送的请求什么样的?Browser Request
这两个请求,有什么区别?
了解清楚有什么区别~才能掌握好爬虫程序的请求[伪装浏览器请求]
(1) 抓包工具
网络上流行的抓包工具有很多,wareshark、burpsuits、fiddler、F12窗口
浏览器发送的请求:F12窗口,直接查看请求信息
程序发送的请求:怎么看PYTHON爬虫程序发起请求的信息
了解请求程序发送请求和浏览器发送请求的区别:才能更加完美的伪造请求
(2) 请求伪造
请求对象:获取一个请求对象,通过请求对象设置用户代理[User-agent]请求头
请求头中的K=V数据:K键值~单词首字母必须大写
请求对象:urllib2.Request对象
通过对urllib2.Request对象的设置,完成请求的伪造操作
隐藏用户:使用代理IP进行请求操作
正向代理:代理客户端发起请求,向服务器请求数据;隐藏客户端信息
反向代理:代理的服务端;隐藏真实服务器信息
都有什么样的代理:免费代理、收费代理-- [透明代理|匿名代理|高匿代理]
python爬虫中,怎么使用这些代理
默认情况下,urllib2爬虫程序直接通过urlopen()发送请求!
查询对应的资料[官网资料|总结的资料|国外资料]
查看底层代码,模仿还原
1.爬虫的理论知识
a)什么是爬虫?
b) 爬虫的分类
i. 通用爬虫VS 聚焦爬虫
ii. 累积爬虫VS 增量爬虫
c) 爬虫的实现
i.Java|Python|PHP|C++|C#|Ruby|Delphi|..
ii. python:更加专业
iii. urllib2基础->requests->scrapy->分布式
2.爬虫的操作
a) urllib2底层数据采集urlopen()函数
b) 伪造请求:伪装浏览器请求
i. 请求对象:请求头数据、请求体数据、请求方式..
ii. 请求头中的User-agent设置,完成浏览器请求的伪装
iii. 请求对象:urllib2.Reuqest对象
c) 模仿用户行为:只有在特殊的情况下才会使用
i. 随机休眠严重影响爬虫采集数据的效率
d) 隐藏客户端:使用IP代理,代理真实客户端完成对服务器数据的访问
i.免费代理|收费代理
ii.正向代理[代购]|反向代理[代理商]
iii. urlopen底层操作
1. 操作对象:urllib2.ProxyHandler({..})
2. 开锁对象:urllib2.build_opener(handler)
3. 发送请求:res = opener.open(url)!
b)采集百度图片[越多越好!