基本介绍
网络爬虫是模拟客户端(主要是浏览器)发送请求/接收响应,自动抓取互联网信息的程序
- 没有明确的法律法规,尽量不要采集个人信息
- 原则上,只要是客户端能做的事情,爬虫都能做
- 爬虫只能获取客户端所能展示的数据
学习路径
- requests模块非常重要,需要掌握
- selenium可以实现非常简单但能用的爬虫
- 反爬机制
- mongodb只需要知道怎么用mongodb以及怎么与python交互
- scrapy爬虫框架
- appium用于手机的数据采集
爬虫的作用
- 数据采集(用于机器学习舆情监控/数据挖掘)
- 软件测试(自动化测试)虫师博客
- 抢票
- 投票
- 网络安全(短信轰炸,web漏洞扫描)
爬虫的分类
根据被爬网站的数量不同,可分为
- 通用爬虫,如搜索引擎
- 聚焦爬虫,专门抓取某一类网站
根据是否以获取数据为目的,可分为
- 功能性爬虫,如投票
- 数据增量爬虫,如招聘信息
根据url地址和对应的页面内容是否改变,数据增量爬虫可分为:
- 基于url地址变化、内容也随之变化的爬虫
- 基于url地址不变,内容变化的爬虫
爬虫的流程
scrapy是这个流程的抽象
url_list -> 发送请求-> 解析响应-> 保存数据
- 获取url
- 向url发送请求,获取响应(需要http协议)
- 如果从响应中提取url,则继续发送请求获取响应
- 如果从响应中获取数据,则保存
http协议复习
http与https的概念和默认端口
- http协议是应用层协议,是发送请求、获取响应需要的
- https比http安全,但效率低一些
- HTTP超文本传输协议,默认端口号80,明文传输
- HTTPS:HTTP+SSL(安全套接字层),默认端口号443,SSL对传输内容进行加密
掌握爬虫关注的请求头和响应头
几个重要请求头:
- Content-Type
- Host:
主机号 - Connection:
HTTP和HTTPS架构在TCP/IP之上,先建立Socket链接,keep-alive避免要三次握手四次断开 - Upgrade-Insecure-Requests:
如果有更安全的协议,就升级,这就是为什么访问百度抓包可以抓到一个重定向的原因 - User-Agent:
发请求的浏览器以及机器的信息
Mozilla是一个基金会,几乎市面上所有浏览器都遵守Mozilla/5.0 - Referer:
页面跳转处,页面请求是从哪来的,检查请求是否合法,防盗链(图片/视频) - Cookie:
保持会话,有时效性 - Authorization:
很少出现,自己练习时输入账号密码会用到
重要响应头:
- Set-Cookie:
对方服务器设置Cookie到用户浏览器的缓存
常见响应状态码
- 200:成功
- 302:跳转,新的url在响应的Location头中给出
- 303:浏览器对于POST的响应进行重定向至新URL
- 307:浏览器对于GET的响应重定向
- 403:资源不可用,服务器理解请求,但拒绝处理(没有权限)
- 404:找不到该页面
- 500:服务器内部错误
- 503:服务器由于维护或负载过重未能答应,响应中可能带有Retry-After响应头(多久之后能重新访问一次);有可能是因为爬虫频繁访问url
所有状态码都不可信
可能服务器识别为爬虫了,也返回200或者500或者其他,所以不能光看状态码,这时尝试浏览器能访问,而爬虫不能访问,就是有可能被识别为爬虫了
Network中的Response得到的源码才是判断依据,而Elements中的源码是渲染之后的源码它不能作为判断依据
浏览器的运行过程
客户机发送域名给DNS,DNS返回IP地址
客户机通过IP地址请求服务器,服务器响应
http请求过程
- 客户机通过IP地址请求服务器,服务器响应
- 浏览器引擎解析响应内容,发现里面需要用到的src,引擎按照顺序发出其他请求并获取相应的响应
- 浏览器加载每个获取到的响应,js,css等内容会修改页面内容,js也可以重新发送请求获取响应
- 从获取第一个响应并在浏览器中展示,直到获取全部响应,并在站是的结果中添加内容或修改,整个过程叫浏览器的***渲染***
在这里可以看到Initiator,除了第一个,都是引擎下载的
浏览器展示的结果可以是由多次请求对应的多次响应渲染出来的
爬虫:
只发送指定请求,不会渲染
浏览器:
发送所有请求,进行渲染
发送请求的文件分类
- 骨骼文件:HTML,静态文件
- 肌肉文件:JS / Ajax请求,产生动态效果
- 皮肤文件:CSS / font / 图片
抓包过程
- 分别按流程在骨骼、肌肉、皮肤文件中查找数据
- 发送请求给目标文件