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

python之爬虫基础(1)

目录

爬虫基础

1.1 HTTP 基本原理

1.1.1 URI和 URL

1.1.2超文本

?1.1.3 HTTP 和HTTPS

1.1.4 HTTP 请求过程

1.1.5 请求


爬虫基础

在写爬虫之前,我们还需要了解一些基础知识,如HTTP原理、网页的基础知识、爬虫的基本原理、Cookies的基本原理等。本章中,我们就对这些基础知识做一个简单的总结。

1.1 HTTP 基本原理

在本节中,我们会详细了解 HTTP的基本原理,了解在浏览器中敲入URL 到获取网页内容之间发生了什么。了解了这些内容,有助于我们进一步了解爬虫的基本原理。

1.1.1 URI和 URL

这里我们先了解一下URI和URL,URI的全称为Uniform Resource Identifier,即统―资源标志符,URL的全称为Universal Resource Locator,即统一资源定位符。
举例来说,https://github.com/favicon.ico是 GitHub的网站图标链接,它是一个URL,也是一个URI。即有这样的一个图标资源,我们用URLURI来唯一指定了它的访问方式,这其中包括了访问协议 https、访问路径(/即根目录)和资源名称favicon.ico。通过这样一个链接,我们便可以从互联网上找到这个资源,这就是URL/URI。
URL是URI的子集,也就是说每个URL都是URI,但不是每个URI都是 URL。那么,怎样的URI不是URL呢URI还包括一个子类叫作 URN,它的全称为Universal Resource Name,即统―资源名称。URN 只命名资源而不指定如何定位资源,比如urn:isbn:0451450523指定了一本书的ISBN,可以唯一标识这本书,但是没有指定到哪里定位这本书,这就是URN。URL、URN和URI的关系可以用图2-1表示。

但是在目前的互联网中,URN用得非常少,所以几乎所有的URI都是URL,一般的网页链接我们既可以称为URL,也可以称为URI,我个人习惯称为URL。

1.1.2超文本

接下来,我们再了解一一个概念–超文本, 其英文名称叫作hypertext,我们在浏览器里看到的网
页就是超文本解析而成的,其网页源代码是一系列HTML代码,里面包含了-系列标签,比如img显
示图片,p指定显示段落等。浏览器解析这些标签后,便形成了我们平常看到的网页,而网页的源代码HTML就可以称作超文本。
例如,我们在Chrome浏览器里面打开任意一一个页面,如淘宝首页,右击任一地方并选择 “检查”
项(或者直接按快捷键F12),即可打开浏览器的开发者工具,这时在Elements 选项卡即可看到当前
网页的源代码,这些源代码都是超文本,如图2-2所示。

1.1.3 HTTP 和HTTPS

在淘宝的首页ht://www.t.obao.com/r, URL的开头会有http 或https,这就是访问资源需要的协议类型。有时,我们还会看到ftp、sftp、 smb 开头的URL,它们都是协议类型。在爬虫中,我们抓取的页面通常就是http或https协议的,这里首先了解一下这两 个协议的含义。
HTTP的全称是Hyper Text Transfer Protocol, 中文名叫作超文本传输协议。HTTP协议是用于从网络传输超文本数据到本地浏览器的传送协议,它能保证高效而准确地传送超文本文档。HTTP由万维网协会( World Wide Web Consortium )和Internet工作小组IETF ( Internet Engineering Task Force )共同合作制定的规范,目前广泛使用的是HTTP1.1版本。

HTTPS的全称是Hyper Text Transfer Protocol over Secure Socket Layer,是以安全为目标的HTTP
通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,简称为HTTPS。
HTTPS的安全基础是SSL,因此通过它传输的内容都是经过SSL加密的,它的主要作用可以分
为两种。

  • 建立一个信息安全通道来保证数据传输的安全。
  • 确认网站的真实性,凡是使用了HTTPS的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息,也可以通过CA机构颁发的安全签章来查询。现在越来越多的网站和App都已经向HTTPS方向发展,例如:
  • 苹果公司强制所有ioS App在2017年1月1日前全部改为使用HTTPS加密,否则App就无法在应用商店上架;
  • 谷歌从2017年1月推出的Chrome 56开始,对未进行HTTPS加密的网址链接亮出风险提示,即在地址栏的显著位置提醒用户“此网页不安全" ;
  • 腾讯微信小程序的官方需求文档要求后台使用HTTPS请求进行网络通信,不满足条件的域名和协议无法请求。

1.1.4 HTTP 请求过程

我们在浏览器中输人一一个URL,回车之后便会在浏览器中观察到页面内容。实际上,这个过程是
浏览器向网站所在的服务器发送了一个请求,网站服务器接收到这个请求后进行处理和解析,然后返回对应的响应,接着传回给浏览器。响应里包含了页面的源代码等内容,浏览器再对其进行解析,便将网页呈现了出来,模型如图2-4所示。

此处客户端即代表我们自己的PC或手机浏览器,服务器即要访问的网站所在的服务器。

1.1.5 请求

请求,由客户端向服务端发出,可以分为4部分内容:请求方法( Request Method)、请求的网址
( Request URL )、请求头( Request Headers )、请求体( Request Body )。
1.请求方法
常见的请求方法有两种: GET和POST。

在浏览器中直接输入URL并回车,这便发起了一个GET请求,请求的参数会直接包含到URL里。例如,在百度中搜索Python,这就是一一个GET请求,链接为htps://www baidu. com/swd= Python,其中URL中包含了请求的参数信息,这里参数wd表示要搜寻的关键字。POST 请求大多在表单提交时发起。比如,对于一个登录表单,输人用户名和密码后,点击“登录”按钮,这通常会发起一个 POST请求,其数据通常以表单的形式传输,而不会体现在URL中。

GET和POST请求方法有如下区别:

  • GET请求中的参数包含在URL里面,数据可以在URL中看到,而POST请求的URL不会包含这些数据,数据都是通过表单形式传输的,会包含在请求体中。
  • GET请求提交的数据最多只有1024字节,而POST方式没有限制。

一般来说,登录时,需要提交用户名和密码,其中包含了敏感信息,使用GET方式请求的话,密码就会暴露在URL里面,造成密码泄露,所以这里最好以POST方式发送。上传文件时,由于文件内容比较大,也会选用POST方式。
我们平常遇到的绝大部分请求都是GET或POST请求,另外还有一些请求方法, 如GET、HEAD、
POST、PUT、 DELETE、OPTIONS、CONNECT、TRACE等,我们简单将其总结为表2-1。

2.请求的网址
请求的网址,即统一资源定 位符URL,它可以唯一确定 我们想请求的资源。
3.请求头
请求头,用来说明服务器要使用的附加信息,比较重要的信息有Cookie . Referer. User-Agent等。
4.请求体
请求体一般承载的内容是 POST请求中的表单数据,而对于GET请求,请求体则为空。

1.1.6 响应
响应,由服务端返回给客户端,可以分为三部分:响应状态码( Response Status Code).响应头
( Response Headers )和响应体( Response Body )。
1.响应状态码
响应状态码表示服务器的响应状态,如200代表服务器正常响应,404代表页面未找到,500代表
服务器内部发生错误。在爬虫中,我们可以根据状态码来判断服务器响应状态,如状态码为200,则
证明成功返回数据,再进行进一步的处理, 否则直接忽略。

2.响应头
响应头包含了服务器对请求的应答信息,如Content-Type、Server、 Set-Cookie 等。

3.响应体
最重要的当属响应体的内容了。响应的正文数据都在响应体中,比如请求网页时,它的响应体就
是网页的HTML代码;请求- -张图片时 ,它的响应体就是图片的二进制数据。我们做爬虫请求网页后,要解析的内容就是响应体.

最后

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。

相关文章:

  • CVE-2022-22978 Spring-security 认证绕过漏洞分析和漏洞挖掘思考
  • 小孩取名:瑭字的寓意和含义
  • 7、IOC 之Bean定义继承 parent
  • J9数字论:模块化公链能否成为公链新趋势?
  • UVM环境中reset复位的处理
  • 示波器探头的选择和作用及原理
  • 新学期,我的FLAG不能倒~
  • 好心情精神心理科医生:精神病人为何会出现幻觉?
  • java计算机毕业设计ssm电子元件仓库管理系统
  • 数据结构与算法--数组
  • jvm oom内存溢出,导出dump,使用mat进行问题分析
  • 百钱百鸡问题(C++枚举法)
  • 基于SSM实现智慧幼儿园信息管理系统
  • 九月组队学习计划!
  • OJ在线编程输入输出(Java版)
  • 【译】理解JavaScript:new 关键字
  • 2017-09-12 前端日报
  • bootstrap创建登录注册页面
  • go语言学习初探(一)
  • JavaScript异步流程控制的前世今生
  • Java程序员幽默爆笑锦集
  • Java深入 - 深入理解Java集合
  • Joomla 2.x, 3.x useful code cheatsheet
  • Koa2 之文件上传下载
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • supervisor 永不挂掉的进程 安装以及使用
  • vue学习系列(二)vue-cli
  • 动态魔术使用DBMS_SQL
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 协程
  • 用jquery写贪吃蛇
  • 正则与JS中的正则
  • nb
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 阿里云ACE认证学习知识点梳理
  • 阿里云服务器购买完整流程
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • # 数据结构
  • $().each和$.each的区别
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (一)Linux+Windows下安装ffmpeg
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)shell调试方法
  • (转)我也是一只IT小小鸟
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .mysql secret在哪_MySQL如何使用索引
  • .net 7 上传文件踩坑
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .Net 知识杂记
  • .net下简单快捷的数值高低位切换
  • /etc/motd and /etc/issue