爬虫基础


一、爬虫的基本原理

概述

爬虫就是假装浏览器爬取网页并获取信息.

爬取数据类型

  • 最常见的就是爬虫能爬取JSON形式的HTML代码.
  • 对于js,css等文件,需分析源代码后台Ajax接口,或者使用Selenium,Splash,Pyppeteer,Playwright等库来模拟js渲染.

    二、Session 和 Cookie

    无状态HTTP (#查询wink状态)

    HTTP对无状态表示HTTP协议对于事务处理没有记忆能力,也就是说服务器并不知道客户端处于什么状态.这意味着如果需要处理前面的信息,客户端必须重传,造成资源浪费.所以,服务器端会保存一个Session,客户端保存一个Cookie,通过这两个凭证,服务器才能做出相应响应.

    Session

    Web中,Session对象用来存储特定用户是所需的属性和配置信息.这样用户再响应的网页跳转时,存储在Session中的信息不丢失.如果Session过期或者没有Session,服务器会创建一个Session.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:Cookiehttponly属性,如果是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


Author: Dovahkiin
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Dovahkiin !
  TOC