当前位置: 首页 > article >正文

python爬虫基础

爬虫基础

1 HTTP基本原理

  • URL(Uniform Resource Identifier)统一资源标志符
    • 格式:scheme://[username:password@]hostname[:port][/path][;parameters][?query][#fragment],中括号包括的内容代表不必要部分。比如:https://www.baidu.com 只包含了scheme 和 hostname两部分。
    • scheme:协议。常用的协议有http、https、ftp等。另外scheme也常被称作protocol,都代表协议。
    • username、password:用户名和密码,在某些情况下URL需要提供用户名和密码才能访问。
    • hostname: 主机地址,可以是域名或IP地址。
    • port:端口,这是服务器设定的服务端口,如:https://8.8.8.8:12345,这个URL中的端口就是12345,但是有些URL中没有端口信息,这是使用了默认的端口。http协议的默认端口是80,https协议的默认端口是443。所以https://www.baidu.com起始相当于https:www.baidu.com:443。
    • path:路径。指的是网络资源在服务器中的指定位置。比如https://github.com/favicon.ico总的favicon.ico中的path就是favicon.cn,指的就是Github根目录下的favicon.ico。
    • parameters:参数。用来制定访问某个资源时的附加信息,比如https://8.8.8.8:12345/htllo;user中的user就是parameters。但是parameters现在用的很少,严格意义上来说,parameters是分号(;)后面的内容。
    • query:查询。用来查询某类资源,如果有多个查询,则用&隔开。比如https://www.baidu.com/s?wd=nba&ie=utf-8,其中的query部分就是wd=nba&ie=utf-8。由于query比刚才所说的parameters使用频率高很多,所以平常见到的参数、GET请求参数、parameters、params等称呼多数情况指代的也是query。严格意义上来说,应该用query来表示。
    • fragment:片段。它是对资源描述的部分补充,可以理解为资源内部的书签。目前它有两个主要的应用,一个是用作单页面路由,比如Vue、React都可以借助它来做路由管理;另外一个是用作HTML锚点,用它可以控制一个页面打开时自动下滑滚动到某个特定的位置。

2 HTTP和HTTPS

  • HTTP(Hypertext Transfer Protocol)中文名为超文本传输协议,其作用是把超文本数据从网络传输到本地浏览器,能够保证高效而准确地传输超文本文档。
  • HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)是以安全为目标的HTTP通道,简单讲的就是HTTP的安全版,即在HTTP下加入SSL层,简称HTTPS。
  • HTTPS的安全基础是SSL,因此通过该协议的内容都是经过SSL加密的,SSL的主要作用有以下两种。
  • 建立一个信息安全通道,保证数据传输的安全性。
  • 确认网站的真实性。凡是使用了HTTPS协议的网站,都可以通过单机浏览器地址栏的锁头标志来查看网站认证之后的真实信息,此外还可以通过CA机构颁发的安全签章来查询。

3 爬虫的基本原理

3.1 爬虫概述

简单来讲,爬虫就是获取网页并提取和保存信息的自动化程序。

  • 获取网页,客户端向网站的服务器发送一个请求,服务器返回的响应体便是网页源代码。python提供了许多库如urllib、requests可以实现构造请求发送给服务器,然后接收到响应并对其接续。
  • 提取信息,获取网页源码后,分析源代码最通用的提取方法是采用正则表达式,这是一个万能的方法。另外,由于网页结构具有一定的规则,所以还有一些库是根据网页节点属性、CSS选择器或XPath来提取网页信息的,如Beautiful Soup、pyquery、lxml等。使用这些库,可以高效地从源代码中提取网页信息,如节点的属性、文本值等。
  • 保存数据,提取信息后,我们一般会将提取到的数据保存到某处以便后续使用。保存数据的形式多种多样,可以保存到Txt文本、JSON文本或CSV文件,也可以保存到数据库,如MySQL和MongoDB等,还可以保存至远程服务器,如借助SFTP进行操作等。
  • 自动化程序,自动化程序的意思是爬虫可以代替人来完成上述操作。我们当然可以手动提取网页中的信息,但是当量特别大或者想快速获取大量数据的时候,肯定还是借助程序快。爬虫就是代替我们完成爬取工作的自动化程序,它可以在爬取过程中进行各种异常处理、错误重试等操作,确保爬取持续高效地运行。

3.2 能爬取怎样的数据

  • 网页返回的HTML代码、JSON字符串(API接口大多采用这种形式)
  • 二进制数据,如图片、视频和音频等。利用爬虫,我们可以将这些二进制数据抓取下来,然后保存成对应的文件名
  • 各种扩展名文件,如CSS、JavaScript和配置文件,这些文件只要在浏览器里可以访问到,就可以抓取下来。
  • 上述内容都有各自对应的URL,URL基于HTTP或HTTPS协议,只要是这种数据,爬虫都可以抓取。

3.3 JavaScript渲染的页面

  • 越来越多的网页是采用Ajax、前端模块化工具构建的,可能整个网页都是由JavaScript渲染出来的,也就是说原始的HTML代码就是一个空壳。
  • 浏览器打开这个页面时,首先会加载这个HTML内容,接着浏览器会发现其中引入了一个js文件,便去请求这个文件,获取该文件后,执行其中的JavaScript代码,JavaScript会改变HTML中的节点,向其中添加内容,最后得到完整的页面。
  • 在用urllib或request等库请求当前页面时,我们得到的只是HTML代码,它不会继续加载JavaScript文件,我们也就无法看到完整的页面内容。这时,我们可以分析源代码后台Ajax接口,也可使用Selenium、Splash、Pyppeteer、Playwright这样的库来模拟JavaScript渲染。

4 Session 和Cookie

4.1 无状态HTTP

HTTP无状态是指HTTP协议对事物处理是没有记忆能力的,或者说服务器并不知道客户端处于什么状态。客户端向服务器发送请求后,服务器解析此请求,然后返回对应的响应,服务器负责完成这个过程,而且这个过程是完全独立的,服务器不会记录前后状态的变化,也就是缺少状态记录。这意味着之后如果需要处理前面的信息,客户端就必须重传,导致额外传递一些重复请求,才能获取后续响应,这种效果不是我们想要的。为了保持前后状态,肯定不能让客户端将前面的请求全部重传一次,这太浪费资源了,对于需要用户登录的页面来说更是棘手。

4.2 如何保持HTTP连接状态

  • Session和Cookie是两种用来保持HTTP连接状态的技术。Session在服务端,也就是网站的服务器,用来保存用户的Session信息;Cookie在客户端,也可以理解为在浏览器端,有了Cookie,浏览器在下次访问相同网页时就会自动附带上它,并发送个服务器,服务器通过识别Cookie就判断出是哪个用户在访问,然后判断此用户是否处于登录状态,并返回对应的响应。
  • 在爬虫中,处理需要先登录才能访问的页面时,我们一般会直接将登录成功后获取的Cookie放在请求头里面直接请求,而不用重新模拟登录。

4.3 Session

  • Session,中文称之为会话,其本意是指有始有终的一系列动作、消息。在Web中,Session对象用来存储特定用户Session所需的属性及配置信息。这样,当用户在应用程序的页面跳转时,存储在Session对象中的变量将不会丢失,会在整个用户Session中一致存在下去,当用户请求来自应用程序的页面时,如果该用户还没有Session,那么Web服务器将自动创建一个Session对象。当Session过期或被放弃后,服务器将终止该Session。

4.4 Cookie

  • Cookie,指某些网站为了鉴别用户身份、进行Session跟踪而存储在用户本地终端上的数据。
  • Session维持,当客户端第一次请求服务器时,服务器会返回一个响应头中带有Set-Cookie字段的响应给客户端,这个字段用来标记用户。客户端浏览器会把Cookie保存起来,当下一次请求相同的网站时,把保存的Cookie放到请求中一起提交给服务器。
  • Cookie中携带者Session ID相关信息,服务器通过检查Cookie即可找到对应的Session,继而通过判断Session辨认用户状态。如果Session当前是有效的,就证明用户处于登录状态,此时服务器返回登录之后才可以查看的网页内容,浏览器再进行解析便可以看到了。
  • 反之,如果传给Cookie是无效的,或者Session已经过期了,客户端将不能继续访问页面,此时可能会收到错误的响应或者跳转到登录页面重新登录。
  • Cookie和Session需要配合,一个在客户端,一个在服务端,二者共同协作,就实现了登录控制。

4.5 会话Cookie和持久Cookie

  • 从表面意思来看,会话Cookie就是把Cookie放在浏览器内容,关闭浏览器之后,Cookie即失效;持久Cookie则会把Cookie保存到客户端的硬盘中,下次还可以继续使用,用于长久保持用户的状态。
  • 严格来说,起始没有会话Cookie和持久Cookie之分,知识Max-Age或Expires字段决定了Cookie的失效时间。因此,一些持久化登录的网站实际上就是把Cookie的有效时间和Session有效期设置的比较长。下次客户端再访问页面时仍然携带之前的Cookie,就可以直接呈现登录状态。当距离客户端上一次使用Session的时间超过这个失效的时间,服务器才可以认为客户端已经停止了活动,并删除掉Session以节省存储空间。

http://www.kler.cn/news/11975.html

相关文章:

  • 场景搭建、素材库、在线标绘等,四维轻云地理空间数据云管理平台新增了这些功能
  • 【python学习】基础篇-列表推导式快速生成列表
  • vue2 和 vue3 共存
  • 我在windows10下,使用CMake gui 编译krita源码
  • Matlab simulink上手控制仿真学习笔记3-常用模块S Function及使用案例
  • 在CSDN创作了6个月,我收获了什么?文末送书~
  • 每日刷题记录(十四)
  • WebRTC 系列(二、本地通话,H5、Android、iOS)
  • 亚马逊云科技为游戏全生命周期提供保障,降低游戏整体运营成本
  • 【数据结构与算法】并查集
  • Qt音视频开发38-ffmpeg视频暂停录制的设计
  • 前端引入和html标签
  • 我所认识的设计模式
  • Python+VUE生成PDF小案例
  • Ansible——介绍ansible
  • 计算专题(小计算题)
  • ubuntu中通过vscode编译调试ORB-SLAM3
  • 图文在线翻译-文本翻译
  • 流程管理中间件BPS二期项目立项准备工作经验分享
  • 测试包的更新
  • 二、JS02 BOM操作
  • 用了这几个方法,Facebook广告转化真上去了!
  • 优思学院|质量大师的那些名言(一)【质量是免费的】
  • 《算法竞赛进阶指南》0x51 线性DP
  • 计及氢能的综合能源优化调度研究(Matlab代码实现)
  • Yolov5一些知识
  • JUC并发编程之读写锁原理
  • 01 |「ChatGPT」简介
  • 机器学习算法系列(三)
  • 命令设计模式(Command Pattern)[论点:概念、组成角色、相关图示、示例代码、框架中的运用、适用场景]