北京装修公司网站建设/电商网站对比表格
认识爬虫
应用架构
客户端,网页端,移动端
Http协议
弄清 HTTP 协议和 TCP/IP 通信协议协议
"""1. 目前互联网上90%的网络传输都是基于http协议2. Https是更加安全的方法 ,对请求数据进行加密3. HTTP是超文本传输协议的缩写,是用于从万维网服务器传输超文本到本地浏览器的插损胡协议
"""
-Http请求流程
http协议端口默认为80端口
-URL
发送http请求时,通过url对网络资源进行定位
"""1. URL,中文叫做全球统一资源定位符。是用来表示某一处资源的地址,也就是网址2. 把http请求理解成为打一通电话,url就相当于对方的手机号码!
"""
-Http请求报文格式
一个完整的http请求包括:请求行,请求头,空行,请求数据
-Http响应报文格式
HTTP/1.1 200 OK\r\n
Content-Type: image/jpeg\r\n
Last-Modified: Fri, 24 May 2019 01:19:38 GMT\r\n
Accept-Ranges: bytes\r\n
ETag: "07139c1ce11d51:0"\r\n
Server: Microsoft-IIS/8.5\r\n
X-Powered-By: ASP.NET\r\n
Date: Sun, 02 Jun 2019 05:28:55 GMT\r\n
Content-Length: 35431
\r\n\r\n\
Cookie技术
保存在客户端
Cookie是在请求头里的。服务端如果要给我们的用户打个标记,比如说用户第一次请求,可以把理解成一个令牌,客户第一次来我的网站,我给你个独一无二的令牌(set_cokkie),这个令牌里面存放了很多敏感信息如账号密码之类的,浏览器拿到这个令牌(cookie)后会把这个令牌(cookie)保存在客户端本地,所以cookie是以文本形式保存在客户端本地的,接下来我们客户端每次向服务端发送请求时都会带上这个cookie,然后服务端识别这个cookie就能识别我们的用户,像很多网站都有什么10天5天免登录,靠cookie实现的。但是既然是保存在本地,安全信息欠佳,容易被黑客利用!
###Session技术
保存在服务端,基于cookie
但是随着业务的发展,我们需要保存的信息也越来越多,越来越敏感,Session也因此出现
Session的目的:在一个客户从打开浏览器到关闭浏览器的这个期间,发起所有的请求都可以被识别成一个用户,而实现的方法是,在一个客户打开浏览器开始访问网站的时候,会生成一个cokkie,SessionID,这个ID每次的访问都会带上,而服务器会识别这个SessionID并且将与这个SessionID有关的数据保存在服务器上,由此来实现客户端的识别状态
Session与Cookie相反,Session是存贮在服务器上的数据,只有客户端传上来的SessionID来判断,所以相对于Cokkie,Session的安全性更高
一般SessionID会在浏览器关闭时丢弃,或者服务器会验证Session的活跃程度,列如30分钟某一个SessionID都没有活跃,那么也会被识别成为失效
利用Socket下载一张图片
-爬虫利器-谷歌
每一条数据,每一张图片,都是一次http请求
-下载第一张图片
import socket
import re
# 创建一个socket
client = socket.socket()
# 图片URL
img_url = 'http://pic.netbian.com/uploads/allimg/190518/111817-1558149497aa83.jpg'
# 编写Http请求报文
data = 'GET /uploads/allimg/190518/111817-1558149497aa83.jpg HTTP/1.1\r\nHost: pic.netbian.com\r\n\r\n'
# 建立连接
client.connect(('pic.netbian.com', 80))
# 发送请求
client.send(data.encode())
# 接收数据
res = client.recv(1024)
# print(res)
length = int(re.findall(b'Content-Length: (\d*)\r\n', res, re.S)[0])
img_data = b'' + re.findall(b'\r\n\r\n(.*)', res, re.S)[0]
while 1:temp = client.recv(1024)if temp:img_data += tempif len(img_data) >= length:breakelse:breakwith open('my_first_img.png', 'wb+') as f:f.write(img_data)