0基础带你认识爬虫

爬虫
1、认识爬虫
一、概念
口语化定义:网络爬虫,程序,自动,批量,下载网络资源。专业角度:假装成客户端与服务端进行数据交互的程序
2.相关概念
2.1应用架构(软件的结构是什么样子的)
- c /s client server 客户端,服务端架构(好比lol,qq)
- b /s browser 浏览器服务器架构(各类网站)
- m /s mobile 移动端,服务端(手机app)
css

 

 

 那么客户端和服务端怎么传数据呢?他们有协议html

2.2 http协议
超文本传输协议(从服务器传输超文本信息到客户端,客户端是没有数据的,数据在服务端,打开一个网页,数据经过http协议从服务器下载回来,整个互联网90%的数据都是基于http协议)
一个完整的http事务包含如下几个流程
1. 输入网址,dns(域名解析成ip,ip就是咱们电脑在互联网上的地址,惟一的,在dns上找到域名,解析成咱们须要的ip,找到咱们的服务器)
2. TCP链接,三次握手(创建好链接,创建好通道)
3. 客户端发送HTTP请求报文
4.服务端收到请求,处理请求,返回一个包含结果的响应
5.浏览器 (根据收到信息的不一样)渲染和展现
特色
- http无链接 每次只处理一个请求(很是快速,每一个请求都是完整的)
- http媒体独立
- http无状态(连续两次请求区分不了是两个用户仍是一个用户)python

2.2.1 请求(request)
一个完整的http请求报文报文包含:请求行,请求头,空行,请求数据/请求体
程序员

 

 

 


1.请求方法
1.0 GET(没有请求体,最多只能发送1024字节) POST HEAD
1.1 web

GET 获取数据(查)
POST 用户帐号密码(增)
PUT(改)
DELETE(删)
2. 请求头
‘名称+:+值’正则表达式

 

 

 Host 指定的请求资源域名(主机和端口号)400表明连不上数据库

UA 指定我是用什么软件给你发送的,我是什么客户端,我是用电脑仍是手机,甚至我是用华为的手机仍是苹果的手机,微博上面回复一条显示什么手机
Acceept
cookie http是无状态的,可是咱们如今又要他可以去把不一样的请求,可以把一个客户端的不一样请求联系在一块儿用到的技术json

3. 请求体/请求数据
二进制,b'' 。GET没有,请求头和请求体必定要有个空行,否则解析不了浏览器

2.2.2 响应
一个完整的响应报文包含:状态行,消息报头,空行,响应正文
安全

 

 

 http响应状态码

让你快速知道当前响应是个什么状况,描述了响应的结果

 

 

1开头的通常看不到

3开头的重定向,打开一个网站的时候,输入用户名和密码,有些网站会跳转,服务端会告诉你一个标志,你须要跳到另一个页面

4开头的表明咱们的代码有问题,看下域名写对了没有,看下参数写对了没有,表明客户端错误
5开头表明服务器错误
通常用二、三、四、5,1通常不怎么用

响应报头(了解)

 

 

Allow

Date

Set-Cookie
Content-Type

2.2.3 会话技术(了解)
http是无状态的,服务器不知道连发两个请求不知道都是你,怎么把他联系在一块儿,怎么区分一个用户的连续请求
cookie,session
cookies (了解)(复数,不止一个cookie)
一个用户请求个人服务端,首先个人服务端检测你有没有,没有不要紧,我在响应里面有个Set-Cookie,给你设置cookie,浏览器在接到这个响应以后,看到这个Set-Cookie以后,他会把你设置的这个cookie记录下来,浏览器会帮你保存这个信息,帮你把这个信息会保存在电脑上面,下次再请求这个网站时,浏览器就会检测看你有没有cookie,有就会把它带上,从而解决了这个问题 案例

凭证,保存在客户端 不安全,数据太大时响应变慢,因此发明了session

session 会话(指打个电话,拨通,讲完以后挂掉,这叫一次会话)在web这个领域,session什么意思呢,其实就是打开浏览器,访问某一个网站,在这个网站上点点点点点点,最后关闭这个网站,关闭这个浏览器,整个一个过程就叫作session,就叫一次会话基于cookie,session把数据 保存在服务端(不一样的框架,不一样的人实现的时候不同,有人会把session存在数据库,有人会把session放在内存里面,有人会把session信息存在文件)
session是怎么运做的?
简单理解,我在服务器,维持一个大字典,每一个客户的信息我用这个大字典来表示,我给每一个客户生成一个cookie,叫作session ID,生成一个随机的,独立的字符串,每一次只要把这个session ID携带过来就能够了,你登陆的时候我就在个人字典里面去新建一个字典,这个字典的key就是session ID,而后把你的值放到那个你的session ID对应的那个字典里面,那我能够存不少信息,这个时候个人信息,个人用户名和密码我不会存在里面,即便被窃取了,也无非是别人可以登录一下,可是咱们支付又要输密码,没办法去绕过,无形中比cookie安全高了不少,另外我存储信息也能够存的多一点,我不须要传给你,你只须要发一个session ID给我,一个session ID最多64字节

2.2.4 网络资源
能够经过互联网去获取网页、图片,音频、视频、媒体文件意见其余文件的集合的总称
爬虫的目标,定位
2.2.5 URL
统一资源定位符,网址,标识互联网上某一处网络资源的地址

 

 

 没有用默认端口,须要显示的写上,他的端口不是80,那就必须在域名的后面加上‘:8080’

/开始到?前面表明的是路径,你是要干什么,你是要首页面仍是要登陆页面,仍是要登陆,仍是要注册,仍是要付款你就经过后面这个路径去区分,咱们刚才说的那个cookie,他会根据这个进行区分
路径参数,在URL里面咱们能够带上这个参数,这个参数能够在服务器解析,通常状况下这个参数是用来作查询参数的,若是要传大量的数据要放在请求体里面
用来标识资源在互联网上的位置,前面表明协议,我这个资源要经过这个协议能够访问,在哪里呢,这个域名和端口就会指向这台计算机,什么信息呢,经过这个路径就指定这个信息,须要哪些参数,后面加上参数,举个例子,我要访问互联网上的某张图片
2.3 https 超文本传输安全协议
http有个很是大的缺点,http发送的时候数据都是明文的,没有加密的
ssl?TLS协议 依托于http的,只不过是在http传送的过程当中他把数据进行了加密,仅此而已
与http的区别
1.https须要申请证书 - ca证书
2.http是明文的,https加密
3.链接方式:http 80 端口 https 443端口
端口: 咱们一个电脑上有不少程序,每一个程序他要访问网络的时候公用一个id,怎么区分不一样的软件,怎么区分不一样的请求,就经过端口
4.

3. 应用领域

3.1 数据采集
淘宝,阿里巴巴,腾讯,百度,华为这种大公司大平台,他们的数据,他们其实有不少免费的,好比说百度有不少免费的服务其实你是付了费的,付了什么费呢,有你的信息,像不少论坛啊,免费的,你以为你是免费的时候,固然你也是免费的,他也是提供了服务给你,其实这些大公司的布局都是获取用户数据,对于大公司来讲,他有本身的平台,有本身的渠道可以拿到数据,那不少中小企业怎么办呢?两个办法,第一个就是买,找大公司去买数据,我和腾讯合做,我和阿里巴巴合做,好比说电商平台和阿里巴巴去合做,搞一个淘宝直通车,广告费用。还有个渠道呢,在很长一段时间就是个爬虫,好比去爬淘宝的商品,你要去爬饿了么,爬美团都有

3.2 搜索引擎
谷歌 它发展起来,最开始就是一个爬虫,发展到如今一个世界级的顶尖的公司,谷歌公司叫作‘’程序员的殿堂‘’若是你有谷歌公司的工做经验,你在国内BAT这种公司你就随便进,若是你有BAT的工做经验,通常的其余企业你也随便进,对不对。谷歌公司最开始其实就是一个爬虫,百度他的搜索也就是一个爬虫,全部的搜索引擎其实都是爬虫,他不停的在互联网上不分日夜的处处去爬,他抽象把互联网当作一个节点这样一个网络,爬虫程序在里面,这样去形象的去比喻,把别人网站的信息收入到本身的数据库,好比说你搜索一个图片,全部图片相关的网站统统都会搜索出来,他在早期怎么作呢,他就是去根据你那个,他的爬虫有个规则啊,他不会爬你整个网页,他只会爬你的头部,咱们打开一个网页的时候

 

 

 

他这里有个meta,它这里面有 不少的信息。
3.3 模拟操做
有时候咱们一些重复的劳动,咱们都知道如今要智能化,自动化,有灌水机器人,之前论坛里面要灌水嘛,要把帖子给顶上去,一会儿几十万哪里找这么多人,虽说有水军,可是这个水军要钱的,技术人员经过写爬虫模拟用户去登陆,去发帖子。还有测试的,软件行业搞测试的,写好一个软件,在发布的时候须要去作各类测试,自动化测试。12306抢票程序,经过爬虫我能够实现,设定好时间,设定好我去哪里,买哪趟车,这个程序帮我自动运行,帮我去抢票,这个也是爬虫。


2、开发流程
1.分析请求流程
2. 发送请求
3. 获取响应内容
4. 解析内容
5. 数据持久化
1. 分析请求流程
目的:找到目标资源的http请求。具体指标:
1. 请求方法
2. url
3. 请求头
4. 请求数据(参数)
1.1 工具(抓包)
1.1.1 fiddler
1.1.2 谷歌浏览器
基本上咱们写的爬虫80%以上用谷歌浏览器就足够,提供了一个开发者调试工具,能对咱们的http请求进行监控,按下F12打开,Network点开,输入网站一回车,分析网页结构就用Elements,分析页面用Network,下面的每一条都是一次http事务。

 

 右边是请求的详细信息,Headers是头部信息,Preview是对结果的渲染,这里为何是白板呢?我这里要跟你们讲个概念,一个网页并非一次请求就能够搞定的,现阶段的网站一个页面他不多是一个html,(在互联网的古时候那个时候都是静态页面,一个网页就是一个请求),一个页面在加载的时候不止一个请求,而后请求也有前后顺序。Response是第一次响应回来的数据

 

 2. 发送请求

2.1 经过socket 发送HTTP请求
from socket import socket
建立客户端
client = socket()
 链接服务端
client.connect(('www.baidu.com',80))
构建http请求报文
data = b'GET / HTTP/1.0\r\nHost: www.baidu.com\r\n\r\n'
发送报文
client.send(data)
接受响应
res = 'b'
temp = client.recv(1024)
print('*'*20)
while temp:
res +=temp
temp = client.recv(1024)
print(res)
client.close()

2.2 工具库
1.urllib python的标准库,网络请求的
2. urllib3 基于python3
3. requests
这个库使得爬虫泛滥,间接致使不少网站的反爬技术不断升级,使用这个equests库能够很是简单的,毫无门槛的去下载不少不少的资源
2.2.1 requests
特色,专为人类而构建,是优雅和简单的python库,也是有史以来下载次数作多的python软件包之一。

3.获取响应内容
3.1 利用socket 下载一张图片

 

3..2 requests下载

 

 4. 解析内容

响应体:一个是文本,还有个是二进制数据
文本:html,json,(js,css)
4.1 html 解析
4.1.1 正则表达式
4.1.2 beautiful soup
4.1.3 xpath
4.2 json 解析
4.2.1 jsonpath
咱们写爬虫的时候有很大一部分工做须要去解析,对数据进行解析,而后提取咱们须要的内容

5. 数据持久化
1. 写文件
二进制数据,少许的通常状况下都是写文件,好比下载图片,mp3,下载视频,变成文件存回来
2. 写数据库
有大量的文本数据,结构性的,存到数据库,好比说查某个商品的销售数据,网上找论文,小说,下载整个网站的小说要把它存到数据库
3、重点和难点
1. 数据获取
有不少反爬措施,反爬技术日新月异
1.1 请求头反爬
好比只要浏览器访问,加一个UA,基本上没有用,处理起来很是方便
1.2 cookie
cookie 处理起来也不难,requests已经帮咱们作了cookie 处理了
1.3 验证码
点触、图形、字符、滑动、短信、语音验证码等等,有的验证码是破解不了的,验证码的处理上面难度很是大,在须要登陆或者验证码的处理上实际上是一个比较难的地方
1.4 行为检测
机器学习,经过对用户的行为,好比点击频率,网页的停留时间,他会进行学习,而后经过这些指标,经过一些模型来判断这个是一个爬虫仍是一我的,这个的难点在你要发现它的规则,也就是他经过什么去判断。举个简单例子,好比时间间隔,爬虫通常你设定的是好比每秒钟它去爬一次,他就每秒钟,分绝不差,可是人点击时间是随机的,为了处理这个,我就在每次爬取的时候在中间加个随机值,随机休眠一段时间我再去爬,就能够解决这个问题。
1.5 参数加密
比较困难,须要去研究,去调试它的gs,看他是用什么方法去加密的数据,须要足够的耐心去gs调试和分析
1.6 字体反爬
爬不到具体的数字,每次自定义的字体,须要去学习相应的字体,把关键的字用本身的字体,比较困难
2. 爬取效率
2.1 并发
你在你的电脑上同时运行多个程序
2.2 异步
2.3 分布式
爬虫会检测ip,若是同一个IP访问次数过多,我就以为你有可能有问题,我可能会封你的ip,这个时候就须要分布式,你把你的爬虫在不一样的电脑上,部署在不一样的主机上面去运行,去爬取

总结以下:

 

相关文章
相关标签/搜索