学习爬虫第一天(爬虫原理步骤)
文章目录
前言
爬虫的兴起
1随着互联网的发展 数据资源变得非常丰富且容易搜索人们发现从网页上找到他们想要的信息是一 件非常简单的事情,他们通常分布在大量的网站 上。但另一个问题出现了,当他们想要数据的时 候,并非每个网站都提供下载按钮,如果进行手 动复制显然是非常低效且乏味的。2网络爬虫就诞生了 。网络爬虫实际上是由网页 机器人/爬虫驱动的,其功能与搜索引擎相同。简 单来说就是,抓取和复制。唯一的不同可能是规模。 3 网络数据抓取是从特定的网站提取特定的数 据,而搜索引擎通常是在万维网上搜索出大部分 的网站。特别是现在的 数据分析 人工智能 大数据的兴起 对于数据的需求越来越高 爬虫蓬勃发展
一、什么是爬虫
爬虫,也被称为网页蜘蛛、网络机器人,或者在某些社区中更常被称为网页追逐者,是一种程序或脚本。它按照特定的规则,自动地抓取互联网上的网页信息,包括文本、图片等,并将这些信息存储到计算机上。
二、爬虫的分类
通用爬虫
将网页下载到本地
聚焦爬虫
从网页中提取我们想要的数据
通常爬虫指的是聚焦爬虫
三、爬虫的本质
模拟客户端发起请求----------接收响应
原则上 只要是浏览器(app)能看到的 都可以爬取 万物皆可爬
四、爬虫不能做的事情
- 爬虫的频次要控制 不要把人家服务器搞崩
- 隐私数据不要爬,比如:身份证 手机号 住址 等等
- 不正当竞争/搬运盈利 比如:爬取人家的数据 去卖钱 (做大了人家会找你麻烦)
- robots协议,一个不成文的约定,一没法律效应,二也没强制作用(一个规定)
五、爬虫的写法
1. 明确目标
1.url:网址
www.runoob.com/python/python-tutorial.html
域名:www.runoob.com
路由:python/python-tutorial.html
- http(超文本传输协议):是一种发布和接收HTML页面的方法,80端口
- https(超文本传输安全协议):利用SSL/TLS安全套接层建立全信道加密数据包,主要用于Web的安全传输协议,在传输层对网络连接进行加密,保障在Internet上数据传输的安全,443端口
2.浏览网页的基本过程
这是一个发起请求获取响应的过程
DNS服务器:DNS是一个分布式的数据库系统,它能够将用户友好的域名转换为计算机能够理解的IP地址。
特点:
- 它由解析器和域名服务器组成。域名服务器保存着网络中所有主机的域名和对应的IP地址,并具有将域名转换为IP地址的功能。这种转换过程被称为“域名解析”。
- 一个域名必须对应一个IP地址,而一个IP地址不一定会有域名。
过程:
- 浏览器通过 DNS服务器 查找域名对应的 IP地址;
- 向IP地址 对应的 Web服务器 发送请求
- Web服务器 响应请求,发回 HTML页面
- 浏览器解析 HTML内容,并显示出来
2. 爬取
- 发起请求(request)
(当用户在浏览器的地址栏中输入一个URL地址并按回车键之后,浏览器会向HTTP服务器发送HTTP请求)
1.请求方式
get:从服务器获取在指定页面信息
GET请求参数都显示在URL上,服务器根据该请求所包含URL中的参数来产生响应内容。 "Get"请求的参数 是URL的一部分。
post:向服务提交数据并获取页面信息
"POST"请求的参数 不在URL中,而在请求体中
2.请求的url
url地址
3.请求头
包含请求时的头部信息,比如UA host cookies,请求头数据是能相信的
4.请求体
请求额外携带的数据,比如:页数
5.User-Agent
身份标识
- 获取响应(response)
1.响应状态(响应码)
`100~199`:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
`200~299`:表示服务器成功接收请求并已完成整个处理过程。常用200(OK 请求成功)。
`300~399`:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(所请求的页面已经临时转移至新的url)307和304(使用缓存资源)。
`400~499`:客户端的请求有错误,常用404(服务器无法找到被请求的页面)、403(服务器拒绝访问,权限不够)。
`500~599`:服务器端出现错误,常用500(请求未完成。服务器遇到不可预知的情况)。
2.响应头
服务器告诉我们的信息,比如内容类型 内容长度 服务器信息,响应数据不能全部相信
3.响应体
请求资源的内容 比如网页的HTML
3. 取
4. 存
get请求
params={'age': '1888'} #传到args 中
requests.get(url='http://httpbin.org/get',headers=headers) # get请求
#get请求传参
?id=1&age=18 #问号前面的是路由 后面的是参数 #多个参数&连接
#伪造请求头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61
Safari/537.36",
}
#伪装身份信息
post请求
data={'username':'nanfeng'}# form中
requests.post(url='http://httpbin.org/post?id=1&age=18',
headers=headers)
#post请求传参
'''
不推荐在url地址栏写参数 这种是get写法
如果参数是密码 地址栏写参数会暴露密码数据
post请求一般参数会在body里(args)
不需要去纠结到底怎么传递参数 用哪种方法去传递 我们只要看人家网
站是怎么传的就行 爬虫是模拟用户发起请求!!!
'''
response的常用属性
查看响应内容,response.text 字符串数据
查看响应内容,response.content返回的字节流数据 二进制数据
查看完整url地址 response.url
查看响应头部字符编码 response.encoding
查看响应码 response.status_code
查看响应头 response.headers
查看请求头 response.request.headers
网页加载的两种方法
- 同步加载
改变网址上的某些请求参数会导致网页发生改变,例如:翻页 网页会
发生改变 加载页面
- 异步加载
改变网址上的请求参数不会使网页发生改变,例如:翻页后网址不会发
生变化 局部的刷新数据
反爬虫的原因
- 不遵守规范的爬虫会影响网站的正常使用
- 网站上的数据是公司的重要资产
- 爬虫对网站的爬取会造成网站统计数据的污染
反爬分类
- 基于身份识别的反爬
- 基于爬虫行为的反爬
- 基于数据加密的反爬
爬虫概念
- 爬虫
使用技术手段 获取网站数据 - 反爬虫
阻止爬虫获取自己网站数据 - 误伤
反爬虫的过程中 错误的将普通用户识别成爬虫 - 拦截
成功阻止爬虫访问