爬虫day01:爬虫概述和基本原理
本帖最后由 淘小欣 于 2021-6-4 15:08 编辑# 01.爬虫概述和基本原理
>**温馨提示:**
>
>爬虫爬得欢,监狱要坐穿;
>数据玩的溜,牢饭吃个够; ---横批:国家管饭
## 一、爬虫概述
### 1.引入
不知道各位是否遇到过这样的需求. 就是我们总是希望能够保存互联⽹上的⼀些重要的数据信息为⼰所⽤.
⽐如,
+ 在浏览到⼀些优秀的让⼈⾎脉喷张的图⽚时. 总想保存起来留为⽇后做桌⾯上的壁纸
+ 在浏览到⼀些重要的数据时(各⾏各业), 希望保留下来⽇后为⾃⼰进⾏各种销售⾏为增光添彩
+ 在浏览到⼀些奇奇怪怪的劲爆视频时, 希望保存在硬盘⾥供⽇后慢慢品鉴
+ 在浏览到⼀些⼗分优秀的歌声曲⽬时, 希望保存下来供我们在烦闷的⽣活中增添⼀份精彩
### 2.互联网介绍
#### 2.1 什么是互联网?
+ 互联网是由网络设备(网线,路由器,交换机,防火墙等等)和一台台计算机连接而成,像一张网一样。
#### 2.2 互联网建立的目的?
+ 互联网的核心价值在于数据的共享/传递:数据是存放于一台台计算机上的
+ 而将计算机互联到一起的目的就是为了能够方便彼此之间的数据共享/传递,否则你只能拿U盘去别人的计算机上拷贝数据了。
### 3.什么是上网?爬虫要做的是什么?
+ 我们所谓的上网便是由用户端计算机发送请求给目标计算机,将目标计算机的数据下载到本地的过程。
只不过,用户获取网络数据的方式是:
+浏览器提交请求->下载网页代码->解析/渲染成页面。
而爬虫程序要做的就是:
+ 模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或文件中
用户获取网络数据的方式与爬虫程序的区别是:
+ 我们的爬虫程序只提取网页代码中对我们有用的数据
### 4.爬⾍和Python
爬⾍⼀定要⽤Python么? ⾮也~ ⽤Java也⾏, C也可以. 请各位记住,编程语⾔只是⼯具. 抓到数据是你的⽬的. ⽤什么⼯具去达到你的⽬的都是可以的. 和吃饭⼀样, 可以⽤叉⼦也可以⽤筷⼦, 最终的结果都是你能吃到饭. 那为什么⼤多数⼈喜欢⽤Python呢? 答案: 因为Python写爬⾍简单. 不理解? 问: 为什么吃⽶饭不⽤⼑叉? ⽤筷⼦?因为简单! 好⽤!
⽽Python是众多编程语⾔中, ⼩⽩上⼿最快, 语法最简单. 更重要的是, 这货有⾮常多的关于爬⾍能⽤到的第三⽅⽀持库. 说直⽩点⼉. 就是你⽤筷⼦吃饭, 我还附送你⼀个佣⼈. 帮你吃! 这样吃的是不是更爽了. 更容易了~
### 5.爬⾍合法么?
⾸先, 爬⾍在法律上是不被禁⽌的. 也就是说法律是允许爬⾍存在的.
但是, 爬⾍也具有违法⻛险的. **就像菜⼑⼀样, 法律是允许菜⼑的存在的. 但是你要是⽤来砍⼈, 那对不起. 没⼈惯着你.** **就像王欣说过的,技术是⽆罪的. 主要看你⽤它来⼲嘛**. ⽐⽅说有些⼈就利⽤爬⾍+⼀些⿊客技术每秒钟对着bilibili撸上⼗万⼋千次. 那这个肯定是不被允许的.爬⾍分为善意的爬⾍和恶意的爬⾍
善意的爬⾍, 不破坏被爬取的⽹站的资源(正常访问, ⼀般频率不⾼, 不窃取⽤户隐私)恶意的爬⾍, 影响⽹站的正常运营(抢票, 秒杀, 疯狂solo⽹站资源造成⽹站宕机)综上, 为了避免进!我们还是要安分守⼰. 时常优化⾃⼰的爬⾍程序,避免⼲扰到⽹站的正常运⾏. 并且在使⽤爬取到的数据时,发现涉及到⽤户隐私和商业机密等敏感内容时, ⼀定要及时终⽌爬取和传播
### 6.**爬⾍的⽭与盾**
反爬机制 ⻔户⽹站,可以通过制定相应的策略或者技术⼿段,防⽌爬⾍程序进⾏⽹站数据的爬取。
反反爬策略 爬⾍程序可以通过制定相关的策略或者技术⼿段,破解⻔户⽹站中具备的反爬机制,从⽽可以获取⻔户⽹站中相关的数据。
**robots.txt(爬虫)协议**: 君⼦协议。规定了⽹站中哪些数据可以被爬⾍爬取哪些数据不可以被爬取。
!(https://gitee.com/tao-xiaoxin/img/raw/master/img/20210520202532.png)
### 7.小结
爬虫的比喻:
+ 如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛
+ 沿着蜘蛛网抓取自己想要的猎物/数据
爬虫的定义:
+ 向网站发起请求,获取资源后分析并提取有用数据的程序
爬虫的价值:
+ 互联网中最有价值的便是数据,比如天猫商城的商品信息,链家网的租房信息,雪球网的证券投资信息等等,这些数据都代表了各个行业的真金白银
+ 可以说,谁掌握了行业内的第一手数据,谁就成了整个行业的主宰,如果把整个互联网的数据比喻为一座宝藏,那我们的爬虫课程就是来教大家如何来高效地挖掘这些宝藏,
+ 掌握了爬虫技能,你就成了所有互联网信息公司幕后的老板,换言之,它们都在免费为你提供有价值的数据。
## 二、爬虫的基本流程
!(https://gitee.com/tao-xiaoxin/img/raw/master/img/20210520202933.png)
### 1.发起请求
+ `(Request,selenium)`使用http请求库向目标站点发起请求(网页,app),即发送一个Request
+ Request包含:请求头、请求体等
### 2、获取响应内容
+ 如果服务器能正常响应,则会得到一个Response
+ Response包含:html,json,图片,视频等
### 3.解析内容
+ 解析html数据:正则表达式,第三方解析库如
+ Beautifulsoup,pyquery等
+ 解析json数据:json模块
+ 解析二进制数据:以b的方式写入文件
### 4.保存数据
入库
+ 数据库:mysql,redis,mongodb
+ 文件:`excel`
### 5.爬虫本质
+ 模拟浏览器发送请求(requests,selenium)-> 下载网页代码->只提取有用的数据(bs4,xpath,re)-> 存放于数据库或文件中(文件,excel,mysql,redis,mongodb)
### 6.其他了解
百度,谷歌,搜索引起都是爬虫
+ 百度一刻不停的取互联网上爬取页面----》存到自己库中
+ 使用百度搜索---》百度库中搜(全文检索es,分词,打分)---》返回
+ 百度快照(百度爬取那一刻的数据),点击标题---》去了原链接
## 三、请求与响应
!(https://gitee.com/tao-xiaoxin/img/raw/master/img/20210520211219.png)
HTTP协议 | [链接](http://www.cnblogs.com/linhaifeng/articles/8243379.html)
`Request`:用户将自己的信息通过浏览器`(socket client)`发送给服务器`(socket server)`
Response:服务器接收请求,分析用户发来的请求信息,然后返回数据(返回的数据中可能包含其他链接,如:图片,js,css等)
例如:浏览器在接收Response后,会解析其内容来显示给用户
而爬虫程序在模拟浏览器发送请求然后接收Response后,是要提取其中的有用数据。
## 四、Request
### 1.请求方式:
+ 常用的请求方式:`GET,POST`
+ 其他请求方式:`HEAD,PUT,DELETE,OPTHONS`
举例:用浏览器演示get与post的区别,(用登录演示post)
post
+ post与get请求最终都会拼接成这种形式:`k1=xxx&k2=yyy&k3=zzz`
+ `post`请求的参数放在请求体内, 可用浏览器查看,存放于`form data`内.
get
+ get请求的参数直接放在url后
### 2.请求url
+ url全称统一资源定位符,如一个网页文档,一张图片
+ 一个视频等都可以用url唯一来确定
url编码
+ https://www.baidu.com/s?wd=图片
+ 图片会被编码(看示例代码)
网页的加载过程是:
+ 加载一个网页,通常都是先加载document文档
+ 在解析document文档的时候,遇到链接,则针对超链接发起下载图片的请求
### 3.请求头: 一般做爬虫都会加上请求头
+ User-agent:请求头中如果没有user-agent客户端配置
+ 服务端可能将你当做一个非法用户
+ host
+ cookies:cookie用来保存登录信息
### 4.请求体
+ 如果是get方式,请求体没有内容
+ 如果是post方式,请求体是format data
举例:
1、登录窗口,文件上传等,信息都会被附加到请求体内
2、登录,输入错误的用户名密码,然后提交,就可以看到post,正确登录后页面通常会跳转,无法捕捉到post
## 五、Response
### 1.响应状态
+ 200:代表成功
+ 301:代表跳转
+ 404:文件不存在
+ 403:权限
+ 502:服务器内部错误
### 2.Respone header
set-cookie:可能有多个,是来告诉浏览器,把cookie保存下来
### 3.preview就是网页源代码
+ 最主要的部分,包含了请求资源的内容
+ 如网页html,图片
+ 二进制数据等
## 六、总结
### 1.爬虫流程
+ 爬取--》解析--》存储
### 2.爬虫所需工具
+ 请求库:request,selenium
+ 解析库:正则,beautifulsoup,pyquery
+ 存储库:文件,mysql,MongoDB,Redis
### 3.爬虫常用框架
+ `scrapy` 无语,不支持markdown语法 本帖最后由 苏紫方璇 于 2021-5-20 23:40 编辑
淘小欣 发表于 2021-5-20 21:48
无语,不支持markdown语法
论坛编辑器是支持markdown的,发帖界面工具栏内有markdown按钮,主版区置顶帖有具体说明 学习到了之前还不懂 有机会还是出点,图片带文字的教程,用Python爬 就好 关注学习了,希望楼主说的详细些 学到了,但是有各种乱码 ,很影响阅读质量。 苏紫方璇 发表于 2021-5-20 23:38
论坛编辑器是支持markdown的,发帖界面工具栏内有markdown按钮,主版区置顶帖有具体说明
版主能否对这个贴进行修正,好贴,但是看起来有点乱
支持楼主,能否对图片重新编辑
页:
[1]
2