爬虫基本原理

爬虫概述

获取网页并提取和保存信息的自动化程序

1、获取网页

urllib、requests等库
向网站的服务器发送一个请求,服务器返回网页源码

2、提取信息

分析源代码,从中提取我们需要的数据
通用方法:正则表达式
根据网页结构提取信息:Beautiful Soup、pyquery、lxml等

3、保存数据

保存为TXT文本、JSON文本、数据库或者远程服务器

注意事项

  • JavaScript渲染的页面

urllib与requests只能得到HTML代码,而有时整个网页是由JavaScript渲染,所以抓取的网页与看到的网页不同

解决方法

分析源代码后台Ajax接口,也可以使用Selenium、Splash、Pyppeteer、Playwright库来模拟JavaScript渲染

静态网页与动态网页

静态网页:由HTML代码编写,不能与用户进行人机交互
动态网页:由HTML,JSP,PHP,Python等语言编写,可以动态解析URL中的参数的变化,关联数据库并动态呈现不同的页面内容

  • 登录与注册

动态网页经典应用场景:用户登录与注册
HTTP的特点:无状态,对事务处理没有记忆能力
这一特点也使得要登陆才能看到的网页这一限制变得麻烦,需要不断重新传递请求
为了解决这一问题,出现了Session与Cookie

  • Session与Cookie

Session:在服务器端储存特定用户Session所需的属性及配置信息,当用户再次请求时,能通过这一Session进行访问,从而达到身份验证的目的
Cookie:在客户端储存的验证信息,为了鉴别用户身份、进行Session跟踪

代理

当爬虫访问频率过高时会被服务器封IP,此时可以将本机的IP伪装一下,让服务器识别不出请求是由我们本机发起的
代理服务器:Proxy Server,网络信息的中转站

多线程与多进程

进程:可以独立运行的程序单位,是线程的集合
线程:一个进程可以同时处理很多任务,例如浏览器可以同时打开很多窗口,其中播放音乐是一个线程,播放视频也是一个线程。线程是操作系统进行运算调度的最小单位,是进程的最小运行单位。

多进程:同时运行多个进程
多线程:同上

  • 并发与并行

并发:多个线程对应的多条指令被快速轮换地执行(三心二意,一个处理器一会处理这个线程,一会处理另外一个线程)
并行:同一时刻有多条指令在多个处理器上同时执行(一心一意,一个处理器一直处理一个线程,需要多个处理器)

  • 加快爬虫速度的方法

爬虫在向服务器发送请求后,必须等待服务器返回响应,属于IO密集型任务,可以启用多线程,在等待服务器返回请求时去处理其它线程,提高整体爬取效率

  • Python中的多线程与多进程

Python中GIL限制导致同一时刻只能运行一个线程,使得Python多线程无法发挥多核并行的优势,但是可以并发(可以用于爬虫)

GIL

GIL:Global Interpreter Lock,全局解释器锁,出于对数据安全的考虑
GIL可以看作是通行证,并且在一个Python进程中,GIL只有一个。线程没有通行证,就不允许执行
线程的执行方式:

  • 获取GIL
  • 执行对应线程的代码
  • 释放GIL
posted @ 2023-02-03 12:04  小谢继续学  阅读(23)  评论(0编辑  收藏  举报