爬虫概念
爬虫的概念和作用
概念:网络爬虫是伪装成客户端 与 服务端进行数据交互的程序。
HTTP与HTTPS
HTTP协议
超文本传输协议
HTTP是基于TCP/IP通信协议来传递数据(如HTML文件,图片文件,查询结果等)
面向连接的
三次握手建立连接,四次挥手断开连接。
URL
协议+域名(端口默认80)+路径+参数
端口号
HTTP 80
HTTPS 443
HTTP请求方法
GET 从服务器获取
POST 向服务器提交
HEAD
DELETE
HTTP请求数据
请求正文通常是使用POST方法进行发送的数据,GET方法是没有请求正文的。
请求正文跟上面的消息报头由一个空行隔开。
HTTP请求格式
请求行
请求头
空行
请求数据
HTTP响应格式
状态行
响应头
空行
响应正文
HTTP协议特点
无连接,媒体独立,无状态
HTTPS协议
基于tcp/ip 和SSL/TLS协议
会话技术
cookie–凭证、vip
Session是基于Cookie
Session是存储在服务器上的数据
Socket
Socket是一种进程间通信机制,提供一种供应用程序
访问通信协议的操作系统调用,使得网络读写数据
和读写本地文件一样容易
套接(建立网络通讯或进程间通讯)字(可交互的有序的指令串)
请求用二进制请求,接受也用二进制接收
利用socket下载一张图片
import socket
import re
import ssl
url = 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=150342272,3273450093&fm=26&gp=0.jpg'
client = ssl.wrap_socket(socket.socket())
client.connect(('ss1.bdstatic.com', 443))
request = b'GET /70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=150342272,3273450093&fm=26&gp=0.jpg HTTP/1.0\r\nHost: ss1.bdstatic.com\r\n\r\n'
client.send(request)
res = b''
data = client.recv(1024)
while data:
res = res + data
data = client.recv(1024)
client.close()
with open('kikiki.jpg', 'wb')as f:
f.write(re.findall(b'\r\n\r\n(.*)', res, re.S)[0])