一、爬虫的基本原理
概述
爬虫就是假装浏览器爬取网页并获取信息.
爬取数据类型
- 最常见的就是爬虫能爬取JSON形式的HTML代码.
- 对于js,css等文件,需分析源代码后台Ajax接口,或者使用
Selenium
,Splash
,Pyppeteer
,Playwright
等库来模拟js渲染.二、Session 和 Cookie
无状态HTTP
HTTP对无状态表示HTTP协议对于事务处理没有记忆能力,也就是说服务器并不知道客户端处于什么状态.这意味着如果需要处理前面的信息,客户端必须重传,造成资源浪费.所以,服务器端会保存一个(#查询wink状态)Session
,客户端保存一个Cookie
,通过这两个凭证,服务器才能做出相应响应.Session
Web中,Session对象用来存储特定用户是所需的属性和配置信息.这样用户再响应的网页跳转时,存储在Session中的信息不丢失.如果Session过期或者没有Session,服务器会创建一个Session.Cookie
见HTTP原理Session维持
客户端第一次请求服务器的时候,服务器会返回一个Set_Cookie
.客户端保存响应字符串,并在之后的请求中带上Cookie
.Cookie
中保存着响应的SessionID
,服务器通过查询SessionID
来找到对应Session
,进而判断用户状态.Cookie的属性结构
在浏览器中打开Application
选项卡,Storage
最后一项就是Cookie
. - Name:
Cookie
名称 - Value:
Cookie
的值,如果是Unicode
字符则需要字符编码,如果是二进制数据,则是BASE64
编码. - Domain:指定可以访问该
Cookie
的域名.表示该Cookie
的可用范围. - Path:
Cookie
的使用路径.如果是/path/,则表示只在该路径可用,如果是/则表示在该Domain
下都可用. - Size:表示
Cookie
的大小. - HTTP:
Cookie
的httponly
属性,如果是True
,则表示只有在HTTP Headers
中才含有此Cookie
,而不能使用document.cookie
来访问此Cookie
. - Secure:是否允许使用安全协议传输
Cookie
.会话Cookie和持久Cookie
会话Cookie
和持久Cookie
本质只是Cookie存储的位置不同,一个是存在缓存,一个是存在硬盘.持久Cookie
的有效期很久,所以可以在下次登录的时候直接使用硬盘中的Cookie
.三、代理的基本原理
基本原理
代理本名代理服务器(Proxy Server
),功能是代网络用户获得信息.客户端把请求发给代理服务器,代理服务器再把请求发给服务器.响应在经过代理服务器返回给客户端.在这个过程中服务器接受到的是代理服务器的IP
.代理的作用
- 突破IP访问限制,访问一些访问不到的站点
(科学上网) - 访问一些单位或者团队的内部资源 (校园VPN)
- 提高访问速度.代理服务器一般都有一个较大的硬盘缓冲区,可以保存数据.如果其他用户访问,可以直接把这些数据给用户(类似
cache
) - 隐藏真实的IP,保护个人信息.
爬虫代理
爬虫爬取速度过快,服务器检测到一个IP地址行为异常会直接封锁IP.使用代理,爬虫就会认为是代理服务器在访问自己,通过切换代理就能防止被发现.代理分类
根据协议区分
- FTP代理,访问FTP服务器,主要端口是21和2121
- HTTP代理 访问HTTP服务器,主流的代理,端口是80和8080
- SSL/TLS代理 主要访问加密网站,一般有SSL和TLS加密功能,端口一般是443
- RTSP代理 主要用于Realplayer访问Real流服务器,端口一般是554
- Telnet代理 主要用于Telnet远程控制(黑客Ddos攻击时隐藏身份),一般端口时23
- POP3/SMTP代理 主要用于以POP3/SMTP发送邮件,具有缓存功能,端口一般是110/25
- SOCKS代理 单纯传递数据包,不关心协议和用法,一般有缓存功能,端口一般是1080.SOCK代理分为SOCKS4和SOCKS5.SOCKS4只支持TCP,SOCKS支持TCP和UDP,还支持身份验证机制,服务器端域名解析等.
根据匿名程度区分
- 高度匿名代理 将数据包原封不动转发,在服务端看来就是一个普通客户端,记录的是代理的IP
- 普通匿名代理 会对数据包做一些处理,服务端可能发现这是一个代理,然后追查客户端的真实IP.这种代理通常会加入的HTTP头有HTTP_VIA,HTTP_X_FORWARDED_FOR
- 透明代理 该种代理不仅会更改数据包,还会告诉服务器真实IP,主要用于过滤数据包,常用于内网防火墙.
- 间谍代理 常见于组织或者个人创建的代理服务器,用于记录用户传输的数据,然后对传输数据进行研究和监控.
常见代理设置
- 网上的免费代理,建议全部抓取下来一个个筛选,然后维护代理池.
- 付费代理
- ADSL拨号,昂贵但是稳定性高
- 蜂窝代理 即使用4G/5G网卡等制作的代理.该代理情形较小,封锁概念低,但是成本高.
四、多线程和多进程的基本原理
线程和进程
进程可以理解为独立运行的程序单位.比如打开浏览器.
线程是进程中的多个任务,比如浏览器打开之后访问网址,加载网页,看视频能同时进行.这就是多线程并发和并行
- 并发:指多个线程对应的多条指令被快速轮换地执行.人宏观上感受不到进程切换,感觉是一起执行
- 并行:指同一时刻有多条指令在多个处理器上同时执行.宏观和微观上都是并行.
多线程的爬虫应用场景
爬虫在向服务器发送请求等待响应的时间内可以处理其他线程.Python中的多线程
Python中GIL(Global Interpreter Lock)的限制导致同一时刻下只可能进行一个线程,无法发挥多核并行的优势.所以不可能并行,只能并发.Python多线程下每个线程的执行方式:
- 获取GIL
- 执行代码
- 释放GIL
Python多进程效果强于多线程.因为每一个进程都有自己的GIL,互不干扰.而多线程需要频繁切换GIL,反而减慢速度.
可见大佬博客学习python多线程:https://cuiqingcai.com/3325.html
python多进程:https://cuiqingcai.com/3335.html