文章目录

  • Python爬虫
  • 第二章 爬虫基础
  • 第1节 HTTP基本原理
  • 一、URI 和URL
  • 二、超文本
  • 三、HTTP和HTTPS
  • 四、HTTP请求过程
  • 五、请求
  • 六、响应



Python爬虫

第二章 爬虫基础

第1节 HTTP基本原理

一、URI 和URL
  1. URI的全称为Uniform Resource Identifier ,即统一资源标志符,
    URL的全称为Universal Resource Locator ,即统一资源定位符。
  2. URL是URI的子集,也就是说每个URL都是URI。URI还包括一个子类叫作URN,它的全称为Universal Resource Name,即统一资源名称。只命名资源而不指定如何定位资源。

python爬虫scrapy爬取二级链接 python爬虫网页超链接_python

二、超文本
  1. 我们在浏览器里看到的网页就是超文本解析而成的, 其网页源代码是一系列HTML代码,里面包含了一系列标签,比如img显示图片,p指定显示段落等。浏览器解析这些标签后,便形成了我们平常看到的网页,而网页的源代码HTML就可以称作超文本
三、HTTP和HTTPS
  1. http或https, 就是访问资源需要的协议类型
  • HTTP叫作超文本传输协议,HTTP协议是用于从网络传输超文本数据到本地浏览器的传送协议,它能保证高效而准确地传送超文本文档。
  • HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,简称为HTTPS。
  1. 某些网站虽然使用了HTTPS协议,但还是会被浏览器提示不安全。这是因为https://www.l2306.cn/的CA证书是中国铁道部自行签发的,而这个证书是不被CA机构信任的,所以这里证书验证就不会通过而提示这样的话,但是实际上它的数据传输依然是经过SSL加密的 。如果要爬取这样的站点,就需要设置忽略证书的选项,否则会提示SSL链接错误。
四、HTTP请求过程
  1. 我们在浏览器中输入一个URL, 回车之后便会在浏览器中观察到页面内容。实际上,这个过程是浏览器向网站所在的服务器发送了一个请求,网站服务器接收到这个请求后进行处理和解析,然后返回对应的响应,接着传回给浏览器。响应里包含了页面的源代码等内容, 浏览器再对其进行解析,便将网页呈现了出来
  2. 用Chrome浏览器的开发者模式下的Network监听组件来做下演示,它可以显示访问当前请求网页时发生的所有网络请求和响应

python爬虫scrapy爬取二级链接 python爬虫网页超链接_python_02

  • 第一列Name:请求的名称, 一般会将URL的最后一部分内容当作名称。
  • 第二列Status:响应的状态码, 这里显示为200, 代表响应是正常的。 通过状态码, 我们可以判断发送了请求之后是否得到了正常的响应。
  • 第三列Type:请求的文档类型。 这里为 document, 代表我们这次请求的是一个HTML文档,内容就是一些HTML代码。
  • 第四列Initiator:请求源。 用来标记请求是由哪个对象或进程发起的。
  • 第五列Size:从服务器下载的文件和请求的资源大小。 如果是从缓存中取得的资源, 则该列会显示fromcache。
  • 第六列Time:发起请求到获取响应所用的总时间。
  • 第七列Waterfall:网络请求的可视化瀑布流。
  • 首先是General部分,Request URL为请求的URL, Request Method为请求的方法,Status Code为响应状态码,Remote Address为远程服务器的地址和端,Referrer Policy为Referrer 判别策略。
  • Request Headers和Response Headers,分别代表请求头和响应头。
    请求头里带有许多请求信息, 例如浏览器标识、Cookies、Host等信息, 这是请求的一部分, 服务器会根据请求头内的信息判断请求是否合法, 进而作出对应的响应。
    Response Headers就是响应的一部分, 例如其中包含了服务器的类型、文档类型、 日期等信息, 浏览器接受到响应后,会解析响应内容, 进而呈现网页内容。
五、请求

分为4部分内容:请求方法(Request Method)、诮求的网址(Request URL)、请求头(Request Headers)、请求体(Request Body)。

  1. 请求方法
    常见的请求方法有两种:GET和POST。
  • GET:在浏览器中直接输入URL并回车,这便发起了一个GET请求,请求的参数会直接包含到URL
    里,其中URL中包含了请求的参数信息,“https://www.baidu.com/s?wd=Python”里的参数wd表示要搜寻的关键字。
  • POST:大多在表单提交时发起。比如,对于一个登录表单,输入用户名和密码后,点击“登录”按钮,这通常会发起一个POST请求,其数据通常以表单的形式传输,而不会体现在URL中。
  • 区别:
    ① GET请求中的参数包含在URL里面,数据可以在URL中看到,而POST请求的URL不会包 含这些数据,数据都是通过表单形式传输的, 会包含在请求体中。
    ② GET请求提交的数据最多只有1024字节,而POST方式没有限制。

一般来说,登录时,需要提交用户名和密码,其中包含了敏感信息,使用 GET方式请求的话,密码就会暴露在URL里面,造成密码泄露,所以这里最好以POST方式发送。上传文件时,由于文件内容比较大,也会选用POST方式。

  1. 请求网址
    即统一资源定位符URL
  2. 请求头
    用来说明服务器要使用的附加信息,比较重要的信息有Cookie、Referer、User-Agent等。
  • Accept:请求报头域,用于指定客户端可接受 哪些类型的信息。
  • Accept-Language:指定客户端可接受的语言类型。
  • Accept-Encoding:指定客户端可接受的内容编码。
  • Host:用于指定请求资源的主机IP和端号,其内容为请求URL的原始服务器或网关的位置。 从HTTP 1.1版本开始,请求必须包含此内容。
  • Cookie:也常用复数形式Cookies,这是网站为了辨别用户进行会话跟踪而存储在用户本地 的数据。它的主要功能是维持当前访间会话。例如,我们输入用户名和密码成功登录某个网 站后,服务器会用会话保存登录状态信息,后面我们每次刷新或请求该站点的其他页面时,会发现都是登录状态,这就是Cookies的功劳。Coo伈es里有信息标识了我们所对应的服务器 的会话,每次浏览器在诮求该站点的页面时,都会在请求头中加上Coo灼es并将其发送给服务器,服务器通过Coo灼es识别出是我们自己,并且查出当前状态是登录状态,所以返回结果就是登录之后才能看到的网页内容。
  • Referer:此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、防盗链处理等。
  • User-Agent:简称UA,它是一个特殊的字符串头,可以使服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息,可以伪装为浏览器;如果不加,很可能会被识别出为爬虫。
  • Content-Type:也叫互联网媒体类型(Internet Media Type)或者MIME类型,在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息。例如,text/html代表HTML格式,image/gif代表GIF图片,application/json代表JSON类型,

请求头是请求的重要组成部分, 在写爬虫时,大部分情况下都需要设定请求头。

  1. 请求体
    请求体一般承载的内容是POST请求中的表单数据,而对千GET请求,请求体则为空。
    登录之前,我们填写了用户名和密码信息,提交时这些内容就会以表单数据的形式提交给服务器,此时需要注意Request Headers中指定Content-Type 为application, x-www-form-urlencoded。只有设置Content-Type为application/x-www-form-urlencoded,才会以表单数据的形式提交。另外,我们也可以将Content-Type 设置为application/ison 来提交JSON 数据,或者设置为multipart/form-data来上传文件

python爬虫scrapy爬取二级链接 python爬虫网页超链接_python_03

在爬虫中,如果要构造POST请求,需要使用正确的Content-Type,并了解各种请求库的各个参
数设置时使用的是哪种Content-Type,不然可能会导致POST提交后无法正常响应。

六、响应

由服务端返回给客户端,可以分为三部分:响应状态码(Response Status Code)、响应头
(Response Headers)和响应体(Response Body)。

  1. 响应状态码
    响应状态码表示服务器的响应状态。在爬虫中,我们可以根据状态码来判断服务器响应状态,如状态码为200 ,则证明成功返回数据, 再进行进一步的处理,否则直接忽略。
    响应状态码表
  2. 响应头
    响应头包含了服务器对请求的应答信息,如Content-Type、Server、Set-Cookie等。
  • Date:标识响应产生的时间。
  • Last-Modified:指定资源的最后修改时间。
  • Content-Encoding:指定响应内容的编码。
  • Server:包含服务器的信息,比如名称、版本号等。
  • Content-Type:文档类型,指定返回的数据类型是什么,如text/html代表返回HTML文档,application/x-javascript则代表返回JavaScript文件,image/jpeg 则代表返回图片。
  • Set-Cookie:设置Cookies 。响应头中的Set- Cooki e 告诉浏览器需要将此内容放在Cookies中,下次请求携带Cookies 请求。
  • Expires:指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到缓存巾。如果再次访问时,就可以直接从缓存中加载,降低服务器负载,缩短加载时间。
  1. 响应体
    最重要的当属响应体的内容了。响应的正文数据都在响应体中,比如请求网页时,它的响应体就是网页的HTML 代码; 请求一张图片时, 它的响应体就是图片的二进制数据。我们做爬虫请求网页后,要解析的内容就是响应体。
    在做爬虫时,我们主要通过响应体得到网页的源代码、JSON 数据等, 然后从中做相应内容的提取。