01 认识爬虫

01 认识爬虫

一、HTTP与HTTPS

1、应用框架

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

2、http协议

目前互连网上90%的网络传输都是基于http协议。

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)

3、http请求流程

一次http请求的基本流程是,有客户端向服务端发起一次请求(request), 而服务器在接收到以后返回给客户端一个响应(response)。所以一次完整的http请求包含请求和响应两部分。

默认的http协议端口为80端口。

4、url

发送http请求时,通过url对网络资源进行定位。

URL(Uniform Resource Locator),中文叫统一资源定位符。是用来标识某一处资源的地址。也即是我们常说的网址。以下面这个URL为例,介绍下普通URL的各部分组成:

01.jpg

4、HTTP请求格式

http请求
客户端发送一个HTTP请求到服务器的请求消息包括以下部分:请求行,请求头,空行和请求数据。

下图给出请求报文的一般格式。

02.jpg

5、HTTP请求方法

根据http标准,http请求可以使用多种请求方法。

1.0定义了三种请求方法:GET,POST和HEAD方法

1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法。

常用方法 是 get和post。

  • GET

    其实简单来说,GET方法一般用来负责获取数据,或者将一些简短的数据放到URL参数中传递到服务器。比POST更加高效和方便。

  • POST

    由于GET方法最多在url中携带1024字节数据,且将数据放到URL中传递太不安全,数据量大时URL也会变得冗长。所以传递数据量大或者安全性要求高的数据的时候,最好使用POST方法来传递数据。

03.jpg

5、HTTP请求头

04.jpg
05.jpg
06.jpg

6、HTTP请求正文

请求正文通常是使用POST方法进行发送的数据,GET方法是没有请求正文的。
请求正文跟上面的消息报头由一个空行隔开。

7、HTTP响应

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

07.jpg

8、HTTP响应状态码

当客户端向服务端发起一次请求后,服务端在返回的响应头中会包含一个HTTP状态码。
HTTP的状态码是由三位数字来表示的,由第一位数字来表示状态码的类型,一般来说有五种类型:

08.jpg

9、HTTP响应报头

09.jpg

10、HTTP协议的特点

HTTP三点注意事项:

  • HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

  • HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。

  • HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

11、HTTPS协议

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版

http协议是基于tcp/ip协议的,而https是在http协议的基础之上,再加了一层SSL/TLS协议,数据在传输过程中是加密的。

HTTPS协议的默认端口是443

二、爬虫概念

1、爬虫的概念和应用

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

  1. 数据采集
    大数据时代来临,数据就是核心,数据就是生产力,越来越多的企业开始注重收集用户数据,而爬虫技术是收集数据的一种重要手段。
  2. 搜索引擎
    百度,谷歌等搜索引擎都是基于爬虫技术。
  3. 模拟操作
    爬虫也被广泛用于模拟用户操作,测试机器人,灌水机器人等。

2、爬虫开发的重难点

  1. 数据的获取
    网络公共资源都是为用户准备的,为了避免被爬虫采集,服务端会设置非常多的图灵测试,阻止爬虫的恶意爬取,也即是反爬措施。爬虫开发工程师在开发爬虫时,需要解决这些反爬措施。我们在开发爬虫的过程中,有很大一部分的工作就是处理这些反爬措施。
  2. 采集的速度
    大数据时代,需要巨大的数据量,动辄千万条的级别,甚至上亿条。如果采集速度跟不上,耗时过长,那么就达不到商业要求。一般我们会采取并发以及分布式来解决速度上的问题。这也是爬虫开发过程中的另外一个重心。

3、爬虫基础socket模块

1)创建服务端

# 导入socket模块
import socket

#创建服务端

server = socket.socket()

#绑定ip地址及端口号
server.bind(("127.0.0.1",8080))

#开始监听
server.listen(5) #设置为最多同时接收5个请求

print('等待客户端的连接...')
tcpCliSock, addr = server.accept()   #接收客户端连接请求
print('取得连接:', addr)
data = tcpCliSock.recv(1024)
print(data)
tcpCliSock.close()  #关闭与客户端的连接
server.close()  #关闭服务器socket

# 等待客户端的连接...
# 取得连接: ('127.0.0.1', 2074)
# b'GET / HTTP/1.1\r\nHost: 127.0.0.1:8080\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN,zh;q=0.9\r\n\r\n'

2)创建客户端

# 导入socket模块
import socket

# 创建客户端
client = socket.socket()

# 连接百度服务器
client.connect(("www.baidu.com",80))

# 构建HTTP报文
request = b"GET / HTTP/1.0\r\nHost: www.baidu.com\r\n\r\n"

# 发送请求
client.send(request)

# 接收响应数据
res =b""
data = client.recv(4096)
while data:
    res += data
    data = client.recv(4096)
    # print(res)
print(res.decode())

3)使用socket下载图片

# 导入socket模块
import socket,re

# 创建客户端
client = socket.socket()

# 图片地址
img_url = "http://i0.hdslb.com/bfs/archive/c6dad696f6c0aebff97f30a5f8c63f9ed09bcac8.jpg"
# 连接服务器
client.connect(("i0.hdslb.com",80))

# 构建HTTP报文
request = b"GET /bfs/archive/c6dad696f6c0aebff97f30a5f8c63f9ed09bcac8.jpg HTTP/1.0\r\nHost: i0.hdslb.com\r\n\r\n"

# 发送请求
client.send(request)

# 接收响应数据
res =b""
data = client.recv(4096)
while data:
    res += data
    data = client.recv(4096)
client.close()
print(res)
img_data = re.findall(b"\r\n\r\n(.*)",res,re.S)[0]
img_data = img_data.strip()
print(img_data)
with open("ez.jpg","wb") as f:
    f.write(img_data)

三、会话技术

1、Cookie

http是无状态的,那服务端怎么区分同一个用户的连续请求呢,这就用到了会话技术:cookie和session。

Cookie有时也用其复数形式 Cookies,英文是饼干的意思。指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。最新的规范是 RFC6265 。

Cookie其实就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。 服务器在接收到Cookie以后,会验证Cookie的信息,以此来辨别用户的身份。

Cookie可以理解为一个凭证。

2、Session

Session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。这个词在各个领域都有在使用。

而我们web领域,一般使用的是其本义,一个浏览器窗口从打开到关闭这个期间。

Session的目的则是,在一个客户从打开浏览器到关闭浏览器这个期间内,发起的所有请求都可以被识别为同一个用户。而实现的方式则是,在一个客户打开浏览器开始访问网站的时候,会生成一个cookie,SessionID,这个ID每次的访问都会带上,而服务器会识别这个SessionID并且将与这个SessionID有关的数据保存在服务器上。由此来实现客户端的状态识别。因此session是基于cookie的

Session与Cookie相反,Session是存储在服务器上的数据,只由客户端传上来的SessionId来进行判定,所以相对于Cookie,Session的安全性更高。

一般SessionID会在浏览器被关闭时丢弃,或者服务器会验证Session的活跃程度,例如30分钟某一个SessionID都没有活跃,那么也会被识别为失效。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342