爬虫基础笔记—爬虫入门+socket爬取一张图片

爬虫入门

基础:

1.Python基础:数据类型,函数,类,re(正则)
2.环境的安装
3.面向对象——scrapy

品质:

1.耐心
2.不怕难
3.初心

HTTP与HTTPS协议

互联网的飞速发展是商业经济推动的。目前几乎所有的商业应用都是基于互联网的,它们一般采用c/s架构,b/s架构或者m/s架构。
c/s 即 client server 客户端 服务端
b/s 即 browser server 浏览器 服务端
m/s 即 moblie server 移动端 服务端

1. HTTP

目前互连网上90%的网络传输都是基于http协议。
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
1.1 HHTP请求流程
一次http请求的基本流程是,有客户端向服务端发起一次请求(request), 而服务器在接收到以后返回给客户端一个响应(response)。所以一次完整的http请求包含请求和响应两部分。
默认的http协议端口为80端口。
1.2 URL
发送http请求时,通过url对网络资源进行定位。
URL(Uniform Resource Locator),中文叫统一资源定位符。是用来标识某一处资源的地址。也即是我们常说的网址。以下面这个URL为例,介绍下普通URL的各部分组成:
在这里插入图片描述
1.3 HTTP请求格式
爬虫基础笔记—爬虫入门+socket爬取一张图片_第1张图片

GET/ HTTP/1.0\r\nHost: www.baidu.com\r\n\r\n

1.4 HTTP请求方式
根据http标准,http请求可以使用多种请求方法。
1.0定义了三种请求方法:GET,POST和HEAD方法
1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法。
常用的是get和post;
爬虫基础笔记—爬虫入门+socket爬取一张图片_第2张图片

1.5 HTTP请求头
爬虫基础笔记—爬虫入门+socket爬取一张图片_第3张图片
爬虫基础笔记—爬虫入门+socket爬取一张图片_第4张图片
爬虫基础笔记—爬虫入门+socket爬取一张图片_第5张图片

自定义服务器(操作)

import socket
#创建服务端
server = socket.socket()
#绑定IP 端口
server.bind(('0.0.0.0',8080))
#监听
server.listen(5)	#连接数
#接收
conn,addr = server.accept()
#接受数据
data = conn.recv(1024)
print(data)

1.6 HTTP响应状态码
爬虫基础笔记—爬虫入门+socket爬取一张图片_第6张图片
例如:403禁止访问 404资源不存在
1.7 HTTP响应报头
爬虫基础笔记—爬虫入门+socket爬取一张图片_第7张图片

爬虫的概念

网络爬虫也叫网络蜘蛛,它特指一类自动批量下载网络资源的程序,这是一个比较口语化的定义。
更加专业和全面对的定义是:网络爬虫是伪装成客户端与服务端进行数据交互的程序。

1.爬虫的应用

a. 数据采集
大数据时代来临,数据就是核心,数据就是生产力,越来越多的企业开始注重收集用户数据,而爬虫技术是收集数据的一种重要手段。
b. 搜索引擎
百度,谷歌等搜索引擎都是基于爬虫技术。
c. 模拟操作
爬虫也被广泛用于模拟用户操作,测试机器人,灌水机器人等。
爬虫的难点
数据的获取(反爬) 和 采集的速度(并发,分布式,多线程提高)
爬虫案例
爬虫基础笔记—爬虫入门+socket爬取一张图片_第8张图片

2.会话技术

Cookie(可以理解为一个凭证)

某些网站辨别用户身份,进行跟踪储存在用户本地终端上的数据(加密)
Cookie其实就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。 服务器在接收到Cookie以后,会验证Cookie的信息,以此来辨别用户的身份。

Session

Session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。这个词在各个领域都有在使用。
而我们web领域,一般使用的是其本义,一个浏览器窗口从打开到关闭这个期间。
Session的目的则是,在一个客户从打开浏览器到关闭浏览器这个期间内,发起的所有请求都可以被识别为同一个用户。而实现的方式则是,在一个客户打开浏览器开始访问网站的时候,会生成一个cookie,SessionID,这个ID每次的访问都会带上,而服务器会识别这个SessionID并且将与这个SessionID有关的数据保存在服务器上。由此来实现客户端的状态识别。因此session是基于cookie的
Session与Cookie相反,Session是存储在服务器上的数据,只由客户端传上来的SessionId来进行判定,所以相对于Cookie,Session的安全性更高。
一般SessionID会在浏览器被关闭时丢弃,或者服务器会验证Session的活跃程度,例如30分钟某一个SessionID都没有活跃,那么也会被识别为失效。
案例1

"""
利用 socket 下载一张图片
"""
import socket
import re
client = socket.socket()
img_url = 'http://bizhi.zhuoku.com/2019/12/13/xinbagou/xinbagou02.jpg'
# http 请求报文
data = '''GET /2019/12/13/xinbagou/xinbagou02.jpg HTTP/1.1\r\nHost: bizhi.zhuoku.com\r\n\r\n'''
# 连接服务器
client.connect(('bizhi.zhuoku.com', 80))
# 发送请求
client.send(data.encode())
# 接收图片信息变量
img_data = b''
# 接收响应 第一次,包含响应头
res = client.recv(1024)
# 获取数据长度
length = int(re.findall(b'Content-Length: (.*?)\r\n', res)[0])
# 获取 第一次请求中的数据
img_data += re.findall(b'\r\n\r\n.*', res, re.S)[0]
# 循环接收
while True:
    temp = client.recv(1024)
    #检测 数据是否收完
    if temp:
        img_data += temp
    else:
        break
    if len(img_data) >= length:
        break

client.close()
img_data = img_data.strip()

with open('text.jpg', 'wb') as f:
    f.write(img_data)

你可能感兴趣的:(爬虫基础)