目录
爬虫的概述、https协议、web请求全过程、requests模块入门。
一.爬虫概述
引题:
不知道各位是否遇到过这样的需求,就是我们总是希望能够保存互联网上的一些重要的数据信息为己所用,
比如,
- 在浏览到一些优秀的让人血脉喷张的图片时.总想保存起来留为日后做桌面上的壁纸。
- 在浏览到一些重要的数据时(各行各业),希望保留下来日后为自己进行各种销售行为增光添彩
- 在浏览到一些奇奇怪怪的劲爆视频时,希望保存在硬盘里供日后慢慢品鉴
- 在浏览到一些十分优秀的歌声曲目时,希望保存下来供我们在烦闷的生活中增添一份精彩
那么恭喜你本篇章将十分的适合于你,因为爬虫就是通过编写程序来爬取互联网上的优秀资源(图片,音频,视频,数据)
爬虫的概念:通过编写程序来获取到互联网上的资源
(1)爬虫和Python的关系?
爬虫一定要用Python么?非也~用Java也行,C也可以,请各位记住,编程语言只是工具,抓到数据是你的目的.用什么
工具去达到你的目的都是可以的.和吃饭一样,可以用叉子也可以用筷子,最终的结果都是你能吃到饭,那为什么大多数人喜欢用Python呢?答案: 因为Python写爬虫简单,不理解? 问: 为什么吃米饭不用刀叉?用筷子?因为简单!好用!
而Python是众多编程语言中,小白上手最快,语法最简单,更重要的是,这货有非常多的关于爬虫能用到的第三方支持
库.说直白点儿.就是你用筷子吃饭,我还附送你一个佣人.帮你吃! 这样吃的是不是更爽了.更容易了~
(2)爬虫合法性
首先,爬虫在法律上是不被禁止的.也就是说法律是允许爬虫存在的,但是,爬虫也具有违法风险的.就像菜刀一样,法
律是允许菜刀的存在的,但是你要是用来砍人,那对不起,没人惯着你,就像王欣说过的,技术是无罪的.主要看你用它
来干嘛.比方说有些人就利用爬虫+一些黑客技术每秒钟对着bilibii撸上十万八千次,那这个肯定是不被允许的.
爬虫分为善意的爬虫和恶意的爬虫
- 善意的爬虫,不破坏被爬取的网站的资源(正常访问,一般频率不高,不窃取用户隐私)
- 恶意的爬虫,影响网站的正常运营(抢票,秒杀,疯狂solo网站资源造成网站宕机)
因此,避免我们学了爬虫去裁三年缝纫机,我们最好遵循善意的爬虫避免干扰网站的正常。
(3)爬虫的矛与盾
- 反爬机制
门户网站,可以通过制定相应的策略或者技术手段,防止爬虫程序进行网站数据的爬取。
- 反反爬策略
爬虫程序可以通过制定相关的策略或者技术手段,破解门户网站中具备的反爬机制,从而可以获取门户网站中相关
的数据。
robots.txt协议:
君子协议。规定了网站中哪些数据可以被爬虫爬取哪些数据不可以被爬取。
第一个爬取网页的源代码:
注:
request代表请求
urlopen代表打开一个网址
二.web请求过程剖析
(1).服务器渲染:在服务器那边直接把数据和html整合在一起, 统一返回给浏览器
- 在页面源代码中能看到数据
(2).客户端渲染:
第一次请求只要一个html骨架,第二次请求拿到数据,进行数据展示
- 在页面源代码中,看不到数据
利用网络工具,进行对web服务器的剖析步骤:
第一步:打开豆瓣官网找到“电影”点击进入
第二步:点击“排行榜”进入后可以按F12或者右击选择“检查”进入“开发者模式”
第三步:找到“分类排行榜”中的“喜剧”(任意一个分类)
第四步:在开发者模式下找到“Network”
第五步:找到“typerank”在“preview”进行验证我们第一次得到是一个骨架
第六步:我们需要找到真正存放数据的地方,需要找到“top_list”这里面存放的是真正存放数据的,这也就能验证我们第二次才能拿到请求。
三.http协议
协议: 就是两个计算机之间为了能够流畅的进行沟通而设置的一个君子协定,常见的协议有TCP/IP,SOAP协议, HTTP
协议, SMTP协议等等..
HTTP协议, Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议,直白点儿,就是浏览器和服务器之间的数据交互遵守的就是HTTP协议。
HTTP协议把一条消息分为三大块内容,无论是请求还是响应都是三块内容
注:
状态码有200、404、500、302
状态码200代表访问一切正常
状态码404代表页面丢失,请求不存在
状态码500代表服务器报错
状态码302代表浏览器你的请求OK,但是你真正的想要内容得去新的地址叫做转发
如图所示:
注:Response Headers (响应头)和Request Headers (请求头)
请求头中最常见的一些重要内容(爬虫需要):
1.User-Agent:请求载体的身份标识(用啥发送的请求)
2.Referer: 防盗链(这次请求是从哪个页面来的?反爬会用到)
3.cookie:本地字符串数据信息(用户登录信息,反爬的token)
响应头中一些重要的内容:
1.cookie:本地字符串数据信息(用户登录信息,反爬的token)
2、各种神奇的莫名其妙的字符串(这个需要经验了,一般都是token字样,防止各种攻击和反爬)
请求方式分为2种分别为:get、post
get(显示提交):一般查询网站用得比较多
post(隐示提交):一般增加数据或者修改数据
四.request入门
首先需要安装第三方库,在命令提示符中输入“pip install requests”若有问题可以查看我的笔记中的“第三方包”:第七章 Python基础进阶-异常、模块与包(其五)-CSDN博客
request利用get请求方式爬取数据代码如下:
注:
网页的地址栏中的地址默认是以get的请求方式。
在最后一定要加上close()关闭连接,不然后续多次请求会导致报错。
request利用post请求方式爬取数据代码如下:
注:
发送post请求,发生的数据必须放在字典中,通过data参数进行传递
将服务器返回的内容直接处理成json()->字典
在最新版本的浏览器中想要查看数据的来源需要在payload中进行查看。
request爬取豆瓣电影名:
注:
这个案例主要讲解如果直接输出的时候遇见没有返回的内容,说明它含有反爬的机制,这个时候需要利用前面处理反爬的方法去解决。
若一个网址后面有一个?后面有一个很长的参数这个时候我们可以利用字典来存储它后面的内容,这样不会破坏它的地址。
若我们想要快速存储电影的名字我们需要用循环加文件来存储它(追加写的方式)的信息利用追加的方式完美解决。
如果文件不太会可以看我笔记有具体讲解语法和使用:第六章 Python基础进阶—文件及函数进阶操作(其四)-CSDN博客
在最后一定要加上close()关闭连接
学习爬虫一定要先学法律,先懂法,切记不要爬崩别人服务器。