Python网络爬虫实战笔记(一)

Python网络爬虫实战笔记(一)

1.1 http 基本原理
1.1.1 URL和URI
URL(Universal Resource Locateor)统一资源定位符
URI(Uniform Resource Identifier)统一资源标志符
URL是URI的子集,也就是说每个URL都是URI,但不是每个URI都是URL。
URI还包括一个子类URN(Universal Resource Name)统一资源名称。URN只命名资源,而不指定如何定位资源。URI、URL、URN可以用图1-1表示
图1-1 URL、URN和URI的关系
但是在目前的互联网中,URN用得非常少,所以几乎所有的URI都是URL,一般网页链接我们既可以称为URL,也可以称为URI。
1.1.2 HTTP请求过程
我们在浏览器中输入一个URL,回车之后便会在浏览器中观察到页面内容。实际上,这个过程是浏览器向网站所在服务器发送一个请求,网站服务器收到这个请求之后进行处理和解析,然后返回对应的响应,接着传回给浏览器。响应里面包含网页的源代码,浏览器对其进行解析,便将网页呈现出来了。
我们先观察第一个网络请求图1-2network面板
其中各列的含义如下:
Name:请求的名称,一般会将url的最后一部分内容当做名称
Status:响应状态码,这里显示200表示正常
Type:请求的文档类型。
Initiator:请求源。用来标记请求是由哪个对象或进程发起的。
Size:从服务器下载的文件和请求资源的大小。如果是从缓存中取得的资源,则该列会显示from cache
Time:发起请求到获取响应所用的总时间
Waterfall:网络请求的可视化瀑布流
点击左边的条目,可看到详细信息,如图1-3所示
图1-3 详细信息
首先是General部分,Request URL为请求的URL,Request Method为请求的方法,Status Code为响应状态码,Remote Address为远程服务器地址和端口,Referrer Policy为Referrer判别策略。
其次是Response Headers和Request Headers,分别代表响应头和请求头。请求头里带有很多请求信息,例如浏览器标识、cookie、host等信息。这是请求的一部分,服务器会根据请求头内的信息判断请求是否合法,进而做出对应的响应。Response Headers就是响应的一部分,例如其中包含了服务器的类型、文档类型、日期等信息,浏览器接收到响应后,会解析响应内容,进而呈现网页内容。
下面分别介绍一下请求和响应都包含那些内容。
1.1.3 请求
请求,由客户端向服务端发送,可分为四个部分内容:请求方法(Request Method)、请求的网址(Request URL)、请求头(Request Headers)、请求体(Request Body)
1.请求方法
常见的请求方法有:GET和POST。
在浏览器中直接输入URL并回车,这便发起了一个GET请求,请求的参数会直接包含到URL里。例如,在百度中搜索python,这就是一个GET请求,链接为https://www.baidu.com/s?wd=python,其中URL中包含请求信息,这里参数wd就代表要搜寻的关键字。POST请求大多在表单提交时发起。比如对于一个登陆表单,输入用户名和密码后,点击登录按钮,这通常会发起一个POST请求,其数据通常以表单的形式传输,而不会体现在URL里。
GET和POST请求方法区别:
GET请求中的参数包含在URL里,数据可以在URL中看到,而POST请求的URL不会包含这些数据,数据都是通过表单形式传输的,会包含在请求体中。
GET请求提交的数据最多只有1024字节,而POST没有限制。
平常遇到的请求大多数都是GET和POST,另外还有一些请求方式总结如下表:
图1-4 其他请求方法
2.请求网址
即URL
3.请求头
请求头,用来说明服务器要使用的附加信息,比较重要的有Cookie、Referer、User-Agent等。
Accept:请求报头域,用于指定客户端可以接受哪些类型的信息。
Accept-Language:指定客户端可接受的语言类型。
Accept-encoding:指定客户端可接受的内容编码。
Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置。
Cookie:也常用复数Cookies,这是网站为了辨别用户进行会话跟踪而存储在用户本地的数据,他的主要功能是维持当前访问会话。例如,我们输入用户名和密码登录某个网站后,服务器会用会话保存登录状态信息,后面每次刷新或请求时都是登录状态,这就是Cookie的功劳。Cookie里有信息标识了我们所对应的服务器的会话,每次浏览器在请求该站点的页面时,都会在请求头中加上Cookie并将其发送给服务器,服务器通过cookie识别出是我们自己,并查出当前状态是登录状态,所以返回内容是登录之后才可以看见的页面内容。
Referer:用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理
User-Agent:简称UA,它是一个特殊的字符串头,可以是服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息,可以伪装浏览器;如果不加,很可能会被识别为爬虫。
Content-Type:也叫互联网媒体类型(Internet Media Type)或者MIME类型,在http协议消息头中,他用来表示具体请求中的媒体类型信息。例如,text/html代表HTML格式,image/gif代表GIF图片等。
因此,请求头是请求的重要组成部分,在写爬虫时,大部分情况下需要设定请求头。
4.请求体
请求体一般承载的内容是POST请求中的表单数据,而对于GET请求,请求体则为空。
1.1.4 响应
响应由服务端返回给客户端,可以分为三部分:响应状态码(Response Status Code)、响应头(Response Headers)和响应体(Response Body)。
1.响应状态码
响应状态码表示服务器的响应状态,一般200代表服务器响应正常,404代表页面未找到,500代表服务器内部发生错误。在爬虫中,我们可以根据状态码来判断服务器响应状态,如状态马尾200,则证明成功返回数据,在进一步处理,否则忽略。
表1-5列出了常见错误代码及原因
在这里插入图片描述图1-5 常见错误代码及错误原因
2.响应头
响应头包含了服务器对请求的应答信息
Date:标识响应产生的时间。
Last-Modified:指定资源的最后修改时间。
Content-Encoding:指定响应内容的编码。
Server:包含服务器信息,如名称、版本号等。
Content-Type:文档类型,指定返回数据类型是什么。
Set-Cookie:设置Cookie。
Expires:指定响应的过期时间,可以使用代理服务器或浏览器将加载的内容更新到缓存中。如果再次访问时,可以直接从缓存中加载,降低服务器负载,缩短加载时间。
3.响应体
最重要的当属响应体的内容。响应的正文数据都在响应体中,比如请求网页时,他的响应体就是网页的HTML代码,请求一张图片时,它的响应体就是图片的二进制数据。我们做爬虫请求网页后,要解析的内容就是响应体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值