因特网联系的是世界各地的计算机(通过电缆),万维网联系的是网上的各种各样资源(通过文本超链接),如静态的HTML文件,动态的软件程序······。由于万维网的存在,处于因特网中的每台计算机可以很方便地进行消息交流、文件资源交流······。基于因特网的帮助,我们可以在web客户端(如浏览器等)通过HTTP访问或者下载web服务端(如网站服务器)上面的web资源。
因特网由TCP/IP统筹,在TCP/IP的基础上进行HTTP活动。HTTP位于TCP/IP的应用层。了解HTTP是为了让爬虫程序模拟客户端的行为去请求服务器数据和反爬虫。
通过在开发者工具里查看分析网页客户端(浏览器)HTTP的请求报文,获得网页HTTP的请求URL、请求方法、请求头、cookie······,爬虫程序可以完备的模拟浏览器去爬取网站的资源;通过查看分析服务器(网站)返回的HTTP响应报文,了解响应状态,响应主体······,爬虫程序就可以根据这些响应内容去实现程序逻辑、处理响应内容、提取目标信息······
HTTP基础 相关术语Internet:因特网,一种把各个网络联系起来的网络,主要由许多计算机和电缆组成
WWW(world wide web):万维网,一种抽象的信息空间
web浏览器(web browser):可以显示网页服务器或者文件系统的HTML网页,并让用户与网页交互的软件。
Web服务器(Web Server):是驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。一般指网站服务器,
HTTP(HyperText Transfer Protocol):超文本传输(转移)协议,处于TCP/IP协议簇的应用层。
URL(Uniform Resource Locator):统一资源定位符
URI(Uniform Resource Identifier):统一资源标识符
URN(Universal Resource Name):统一资源名称
HTML(HyperText Markup Language):超文本标记语言
TCP/IP(TCP/IP Protocol Suite):TCP/IP协议族,其中一种定义为互联网相关的各类协议族的总称
TCP(Transmission Control Protocol):传输控制协议
IP(Internet Protocol Address):网际协议地址
cookie:一种用户识别机制,一种功能强大且高效的持久身份识别的技术
DNS(Domain Name System):域名系统,提供域名到IP地址的解析服务,处于TCP/IP协议簇的应用层。
IPv4(Internet Protocol Version 4):网际协议第四版,规定IP长度为32位
IPv6(Internet Protocol Version 6):网际协议第六版,规定IP长度为128位
URL通常我们说的网址就是一个URL,URL是URI的一个子集,URN也是URI的一个子集,URL和URN存在交集,大概率的情况都是URI=URL,关系如下:
当我们在web客户端浏览器输入网址(URL)的时候,如果网址无误,通过HTTP就能得到web服务端的响应。URL语法如下:
scheme:方案,访问web服务器时使用的协议类型,如http:或https:不区分大小写,最后加一个冒号:
user:用户,访问服务器时指定用户登录,为可选项
password:用户密码,和用户相连,可选
host:主机,服务器地址,可以是DNS可解释的域名(人性化)或IPv4/IPv6地址
port:端口号,指定服务器连接的端口号,即监听的端口号,若客户端省略则为默认端口,HTTP默认端口为80
path:路径,指定服务器上的文件路径,定位资源。由一个斜杠/与前面的URL组件分隔开
params:参数,指定输入参数,形式为键值对,用;将其与path的部分隔开。可选
query:查询,为查询字符串,针对已选的路径内的资源,传入参数,用?将其与URL其他部分隔开。可选
frag:片段,为片段标识符,通常标记出以获取的资源的子资源,通过#与URL其它部分隔开,不会传递到服务端,由客户端内部使用。可选
了解这些是有用的,其中的一个用途就是在爬虫中构建自己的URL请求参数。例如书上所说的如果要爬取作者新的浪微博,由于微博是是ajax的方式加载,需要在开发者工具才能看到ajax请求和服务器的响应,所以请求url需要在开发者工具里查找,经过查找分析,发现xhr(可以查看ajax的请求和响应信息)中的请求URL传入了4个参数(问号后面的即为查询传入的参数),前面三个是不变的,而变化的是最后一个,我们可以利用urllib模块中的urlencode模块来传递这些参数,链接如下:
https://m.weibo.cn/api/container/getIndex?type=uid&value=2830678474&containerid=1076032830678474&page=2
代码如下: