爬虫概念
爬虫又称网页蜘蛛或网络机器人
是模拟人操作客户端(浏览器、app)向服务器发起请求,抓取数据的自动化程序或脚本。
模拟:用爬虫程序伪装出人的行为, 避免被服务识别为爬虫程序 。
客户端:浏览器、app都可实现人与服务器之间的交互
自动化:爬取的数据往往量很大(百万、千万条),所以需要自动化获取
爬虫语言
PHP 并发能力差,多多进程多线程支持不好,数据量较大爬虫效率低
C/C++ 效率高,但是学习成本高,对程序员要求高,市场需求少,目前还在研究层面
Java 代码臃肿,代码量大,维护成本高,开发效率低,需求比较旺盛
Python 语法简单,学习成本低,对新手友好,有大量的库和框架。目前处于爬虫的主导地位
Go
爬虫分类
通用爬虫:搜索引擎(搜索引擎不是通用爬虫,通用爬虫只提供数据)
聚焦爬虫:聚焦爬虫指针对某一领域根据特定要求实现的爬虫程序, 抓取需要的数据(垂直领域爬取)
增量式爬虫:监测某一网站,若有更新,爬取其更新数据
深度爬虫:爬取的数据隐藏在form表单中
通用爬虫
功能: 访问网页 -> 抓取数据 -> 数据处理 -> 提供检索服务
流程:
1.给定一个起始URL, 存于爬取队列中
2.爬虫程序从队列中取出url, 爬取数据
3.解析爬取数据, 获取网页内的所有url, 放入爬取队列
4.重复第二个步骤
缺点
1.抓取的内容多数无用
2.无法精确获取数据
协议: robots协议 --> 约定哪些内容允许哪些爬虫抓取
1.无需遵守, 该协议适用于通用爬虫, 而我们写的是聚焦爬虫
2.查看方法: 网站/robots.txt, 如https://www.baidu.com/robots.txt
聚焦爬虫
概念:聚焦爬虫指针对某一领域根据特定要求实现的爬虫程序, 抓取需要的数据(垂直领域爬取)
设计思路
(1).确定爬取的url, 模拟浏览器请服务器发送请求
(2).获取响应数据并进行数据解析
(3).将目标数据持久化到本地
服务器常见端口
ftp文件传输协议:21
ssh远程登录会话:22
mysql关系型数据库:3306
MongoDB非关系型数据库:27017
Redis非关系型数据库:6379
http
与https
的区别
1、https协议需要到ca申请证书,一般需要费用
2、http是超文本传输协议,信息是明文传输,https是具有安全性的加密传输协议
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
4、http的连接很简单,是无状态的,https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,更加安全
OSI
模型七层
7.应用层
6.表示层
5.会话层
4.传输层
3.网络层
2.数据链路层
1.物理层
TCP/IP
协议五层
5.应用层(HTTP、HTTPS、FTP(文件传输)、SSh(远程登录会话))
http
https:比http多了ssl安全套接层
4.传输层(TCP、UDP)
tcp:基于字节流的流式传输,传输可靠,面向连接
1)有序性:发出前对数据包编号,接收时按照编号重组
2)正确性:checksum函数进行校验,发送和接收都计算校验和
3)可靠性:超时重发
4)可控性:滑动窗口协议和拥塞控制算法来实现发送和接收的同步
udp:面向无连接的用户数据报协议,传输不可靠
1)无连接,数据可能损坏或丢失
2)报文小,传输速度快
3)适用于吞吐量大的网络传输,可以在一定程度上承受数据丢失
3.网络层(IP协议)
2.数据链路层
arp协议:通过ip找mac
交换机不识别ip,但是识别mac(电脑出厂唯一标识)
1)发送人发送数据包(IP)到交换机
2)交换机通过广播方式向所有用户发送此包,用户进行解析,IP对的向交换机发送包(包含mac)
3)交换机进行单播
1.物理层(以太网协议)
请求方法
- GET: 请求页面, 并返回页面内容 # 重点
- POST: 用于提交表单数据或上传文件, 数据包含在请求体中 # 重点
- PUT: 从客户端向服务器传送的数据取代指定文档中的内容
- DELETE: 请求服务器删除指定的页面
- HEAD: 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头
- CONNECT: 把服务器当作跳板,让服务器代替客户端访问其他网页
- OPTIONS: 允许客户端查看服务器的性能
- TRACE: 回显服务器收到的请求,主要用于测试或诊断
请求头
请求头,用来说明服务器要使用的附加信息. 重点掌握: Accept, Cookie, Referer, User-Agent
1.Accept:请求报头域,用于指定客户端可接受哪些类型的信息。 # 重点(*/*)
2.Cookie:也常用复数形式 Cookies,这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据。它的主要功能是维持当前访问会话。例如,我们输入用户名和密码成功登录某个网站后,服务器会用会话保存登录状态信息,后面我们每次刷新或请求该站点的其他页面时,会发现都是登录状态,这就是Cookies的功劳。Cookies里有信息标识了我们所对应的服务器的会话,每次浏览器在请求该站点的页面时,都会在请求头中加上Cookies并将其发送给服务器,服务器通过Cookies识别出是我们自己,并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的网页内容。 # 重点
3.Referer:此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如作来源统计、防盗链处理等。 # 重点
4.User-Agent:简称UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很可能会被识别出为爬虫 # 重点
5.x-requested-with :XMLHttpRequest # 代表ajax请求
5.Accept-Language:指定客户端可接受的语言类型。
6.Accept-Encoding:指定客户端可接受的内容编码
7.Content-Type:也叫互联网媒体类型(Internet Media Type)或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息。例如,text/html代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型
状态码
200系列:
200 成功 服务器已成功处理了请求 # 重点
300系列:
301 永久移动 请求的网页已永久移动到新位置,即永久重定向 # 重点
302 临时移动 请求的网页暂时跳转到其他页面,即暂时重定向 # 重点
400系列:
400 错误请求 服务器无法解析该请求 # 重点
401 未授权 请求没有进行身份验证或验证未通过
403 禁止访问 服务器拒绝此请求 # 重点
404 未找到 服务器找不到请求的网页
500系列
500 服务器内部错误 服务器遇到错误,无法完成请求 # 重点
501 未实现 服务器不具备完成请求的功能
502 错误网关 服务器作为网关或代理,从上游服务器收到无效响应
504 网关超时 服务器作为网关或代理,但是没有及时从上游服务器收到请求
505 HTTP版本不支持 服务器不支持请求中所用的HTTP协议版本
反爬机制跟反反爬策略
UA检测 -- UA伪装(User-Agent)
代码
# 请求头
headers={
# UA伪装
'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/' +
'537.36(KHTML,likeGecko)Chrome/75.0.3770.142Safari/537.36'
}
# url路由
url='https://www.zhihu.com/search?'
# 拼装到url中的参数,根据具体浏览器具体分析
params={
'q':keyword}
代理ip
proxies={
# https协议
'https':'http://IP:port',
# http协议