你真的了解爬虫吗?看完你会对网络爬虫有更深更全面的认识

退休的龙叔 退休的龙叔     2023-01-26     777

关键词:

前言

爬虫是门很有意思的技术,可以通过爬虫技术获取一些别人拿不到或者需要付费才能拿到的东西,也可以对大量数据进行自动爬取和保存,减少时间和精力去手动做一些累活。

可以说很多人学编程,不玩点爬虫确实少了很多意思,不管是业余、接私活还是职业爬虫,爬虫世界确实挺精彩的。

今天来给大家浅谈一下爬虫,目的是让准备学爬虫或者刚开始起步的小伙伴们,对爬虫有一个更深更全的认知。



一、认识爬虫

1.什么是爬虫?

用一句话来给大家介绍大名鼎鼎的爬虫:请求网站并提取数据的自动化程序

我们来拆开理解一下爬虫:

请求网站的意思就是向网站发送请求,比如去百度搜索关键字“Python”,这个时候我们的浏览器就会向网站发送请求;

提取数据,数据包括了图片、文字、视频等等,都叫数据,在我们发送请求之后,网站会呈现搜索结果给我们,这其实就是返回了数据,这时候我们就可以对数据进行提取;

自动化程序,也就是我们写的代码,实现了自动提取程数据,比如批量对返回的图片进行下载和保存,替代我们一张一张图片进行手工操作。


2.爬虫的分类

根据使用场景,爬虫可以分为三类:

①通用爬虫(大而全)
功能强大,采集面广泛,通常用于搜索引擎,比如百度浏览器就是一个很大的爬虫程序。

②聚焦爬虫(小而精)
功能相对单一,只针对特定网站的特定内容进行爬取,比如说去某个网站批量获取某些数据,这也是我们个人最常用的一种爬虫了

③增量式爬虫(只采集更新后的内容)
这其实是聚焦爬虫的一个迭代爬虫,它只采集更新后的数据,对老数据是不采集,相当于一直存在并运行,只要有符合要求的数据更新了,就会自动爬取新的数据。


3.Robots协议

在爬虫中有一个叫Robots协议需要注意一下,又称为“网络爬虫排除标准”,它的作用就是网站告诉你哪些东西能爬,哪些不能爬。

这个Robots协议去哪看?一般情况下直接在网站首页网址后面加/robots.txt就能查看,比如百度的Robots协议就在https://www.baidu.com/robots.txt ,可以看到里面有很多网址都规定了不能爬,比如Disallow:/shifen/ 说明当前Disallow:/shifen以及Disallow:/shifen下面的子目录网页均不能爬。


其实这个Robots协议属于一个君子协议,对于爬虫者来说,基本上就是口头协议,你违反了它你有可能会被追究法律责任,但不违反它,爬虫将是爬不到什么数据,所以平时双方都是睁一只闭一眼,不要太嚣张就可以了。


二、爬虫的基本流程

1.爬虫的4步

爬虫是怎么干活的?爬虫程序大致上可以分为四步走:

①发起请求
通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。

②获取响应内容
如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能有HTML、Json字符串和二进制数据(如图片视频)等类型。

③解析内容
得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。

④保存数据
保存的数据样式很多,可以保存为文本,也可以保存至数据库,或者保存为特定格式的文件。

基本上这就是爬虫要遵循的四步了。


2.Request和Response

Request和Response是爬虫中最重要的一部分,Request和Response是什么关系?它们两的关系如下图:


简单理解一下,当我们在电脑的浏览器上搜索某个东西的时候,比如前面的所说的在百度搜索“Python”,你点击百度一下,就已经向百度的服务器发送了一个Request请求,Request包含了很多的信息,比如身份信息、请求信息等等,服务器接收请求之后做判断,然后返回一个Response给我们的电脑,这其中也包含了很多信息,比如请求成功与否,比如我们请求的信息结果(文字、图片和视频等等)。

这样讲应该很好理解吧?接下来我们再好好去看一下Request和Response。


三、了解Request

Request包含了哪些东西?它主要包含了以下一些东西:

1.请求方式

请求方式可以理解为你跟网站打招呼的方式,你要从网站拿到数据,你就得用正确的方式去跟它打招呼,它才有可能理你,就好比你要别人家借个东西,你得先敲门再说你好,你直接爬窗户进去这谁瞧见了都得给你撵出去。

主要的请求方式有GET和POST,另外还有HEAD/PUT/DELETE/OPTIONS等等其他方式,其中最常用的还是GET这种请求方式


2.请求URL

什么是URL?URL全称统一资源定位符,比如一个网页文档、图片、视频等等都有唯一的URL,在爬虫中我们可以理解为网址或者链接。


3.请求头

什么是请求头?英文名Request Headers,通常是指请求时包含的头部信息,比如User-Agent、Host、Cookies等等。

这些东西它相当于你向网站发送请求时你的身份信息,这里面经常需要伪装一下自己,伪装成普通用户,避免你的目标网站识别出来你是爬虫程序,规避一些反扒问题,顺利拿到数据。


4.请求体

官方一点的说辞就是请求时额外携带的数据,如表单提交时的表单数据。

怎么理解?就比如说你去你岳父家提亲,你不能空着手过去提亲对吧?你得带点东西才像个提亲的样子,你岳父才会把女儿许配给你,这是大家通用的礼数,少不了的。

在爬虫当中怎么理解?比如说在某些页面你得先登录了或者你得告诉我你请求什么,比如说你在百度这个网页中搜索“Python”,那么这个“Python”这个关键字就是你要携带的请求体,看到了你的请求体,百度才知道你要干什么。

当然了,请求体通常是用在POST这种请求方式里面,在GET请求时我们通常是拼接在URL里面,这里先理解一下就可以了,后续具体爬虫可以去加深理解。


5.实操查看Request

既然Request的理论我们已经讲过了,那么我们就可以去实操看一下Request具体在哪个位置以及包含哪些东西。

以谷歌浏览器Chrome为例,我输入关键字“Python”可以搜索出一堆结果,我们来用网页自带的控制台窗口来分析一下我们发出的Request请求。

按住F12或者在网页空白处右键选择“检查”,然后可以看到控制台里面有很多选择,比如说上面那一栏有一个菜单栏,初级爬虫一般我们就比较常用到的是Elements(元素)和Network(网络),其他的东西暂时用不到,等你学到了高级一点的爬虫就会用到了,比如JS逆向的时候可能会用到Application这个窗口,后面用到了再了解。

Elements包含了所有的请求结果的每一个元素,比如每一个图片的源代码都是有的,尤其是当你点了左上角的小箭头之后,你移动到的每一个地方在Elements窗口下都会显示对于的源代码。

Network就是爬虫常用到的网络信息,其中就有我们的Request,我们来看一下,在Network窗口下,勾选Disable cache(禁用缓存),并把All点上。

刷新一下网页看看效果,可以看出我们发出了132个Request请求,这个不用好奇,虽然我们只是向百度发出了“Python”这么一个请求,但有些是网页附带的请求。

虽然里面有很多类型,什么图片格式的png啊jpeg等等,但是你可以滑动到最上面,在Type(类型)那一列中有document这种类型,就是网页文档的意思,点击进去就有我们的Request信息。

点击document进去之后,又有一栏新的菜单栏,在Headers那一栏下面,我们可以看到 Request URL,也就是我们前面说的请求URL,这个URL才是我们真正向网页请求的URL,然后还有请求方式,可以看出来是GET请求这种方式。

往下再滑动一下,还可以看到我们前面讲的请求头 Request Headers ,信息很多,但我们前面讲的User-Agent、Host、Cookies都是有的,这些都是我们给服务器的信息。

Request Headers里面内容虽然多,我们在写爬虫程序的时候也是要在这方面做伪装工作,但并不是所有的信息我们都要写,选择性地写一些重要的信息就可以了,比如User-Agent必带,Referer和Host是选择性地带,cookie在要登录的情况下会带,常用的也就4项要做伪装。

至于请求体这里我就暂时不做查看了,因为我们这里的请求方式是GET请求,在POST请求中才能查看到请求体,没关系,爬虫用到了你自然就会明白的。


四、了解Response

Response主要包括3块内容,我们来一一了解一下。

1.响应状态

我们发送请求之后,网站会返回给我们一个Response,这其中就包括了响应状态码对于的响应状态,大致可以分为以下几种:

①两百范围,比如响应状态码200则表示成功。

②三百范围,比如301表示跳转。

③四百范围,比如404找不到网页。

④五百范围,比如502找不到网页。

对于爬虫来说,两三百则是我们最希望看到的响应状态,有可能会拿到数据,四五百基本上就凉了,拿不到数据的

比如我们刚在在前面的Request请求发送时,在document文件中,在Headers窗口下的General里面可以看出响应状态码是200,说明网页成功响应了我们的请求。


2.响应头

服务器给我们的信息里面也会有响应头这一部分,这里面包含了内容类型、内容长度、服务器信息和设置Cookie等等。

其实响应头对我们来说并不是那么重要,这里了解一下就可以了。


3.响应体

这个就很重要了,除了前面第一点的响应状态,就是它了,因为它包含了请求资源的内容,比如网页HTML和图片二进制数等等。

响应体在哪里呢?也是在document文件里面的Response那一栏,可以往下滑动就可以看出里面有很多响应的数据,这就是我们获取到的数据,有的是可以直接下载的,有的则是需要用技术去解析才能拿到。


五、爬虫能获取到什么样的数据?

爬虫能获取到什么样的数据?基本上可以分为这么几类:

①网页文档,如果HTML文档、Json格式文本等。

②图片,获取的是二进制文件,保存为图片格式即可。

③视频,也是二进制文件,保存为视频格式即可。

④其他的,反正其他能够看得见的东西,理论上都是可以用爬虫获取的,具体的话得看难度的大小。


六、如何解析数据?

从前面我们可以发送请求成功之后,网页会给我们返回很多的数据,有几千甚至几万条代码,那么如何在这么多的代码中找到我们想要的数据?常用的方法有以下几个:

①直接处理。当网页返回数据就是一些文本,就是我们想要的内容,不需要过滤处理,直接处理就可以。

②Json解析。如果网页返回的不是HTML数据是Json数据,那么就需要用到Json解析技术。

③正则表达式。如果返回的数据是符合正则表达式的数据,就可以用正则去做解析。

④其他解析方式。常用的有XPath、BeautifulSoup和PyQuery,这些都是爬虫常用的解析库。


七、怎么保存数据?

拿到数据后,常用的保存数据方法有以下几种:

①文本。可以直接保存为纯文本、EXCEL、Json、Xml等等类型的文本。

②关系型数据库。数据可以保存到关系型数据库,比如MySQL和Oracle等等数据库。

③非关系型数据库。如MongoDB、Readis和Key-Value形式储存。

④二进制文件。如图片、视频、音频等等直接保存为特定格式即可。

关于爬虫,今天就先讲到这里,欢迎在下方评论区留言交流

两周从爬虫小白变大神,看完你就知道我不是标题党了五万字教程,建议收藏(代码片段)

大家好,我是辣条,今天给大家带来最硬核的爬虫教程。目录Python爬虫第一天什么是爬虫爬虫与Web后端服务之间的关系Python爬虫技术的相关库常见反爬虫的策略爬虫库urllib【重要】作业爬虫第二天回顾知识点requests库【重... 查看详情

#sprapy爬虫框架初了解

Scrapy的安装cmd命令提示符下:执行pipinstallscrapy命令maybe你会用到的指令或安装(如果用pip指令安装不了,你可以在CSN或度里面找资源):pipinstallDjangoinstallwin32apiinstallmysql-pythonScrapy爬虫框架结构爬虫框架是实现爬虫功能的一个软件... 查看详情

不懂编程?一文学会网络爬虫!(代码片段)

...上面的流程。在此之前,让我们对于网页有一个更深入的了解。认识网页??首先我们要了解平时在浏 查看详情

你真的了解“对象解构赋值”吗?关于对象解构的全面解析✌

前言大家好,我是 CoderBin。本文将给大家分享JavaScript中,有关对象解构赋值的那些代码技巧,希望能给大家带来帮助,谢谢。如果文中有不对、疑惑的地方,欢迎在评论区留言指正 查看详情

bbc解剖了一个200斤女子,看完你会用生命去减肥!

此文有部分血腥的解剖画面,如果无法忍受可以现在关掉页面!  最近BBC有一部纪录片震惊全球,  他们用最直观的方式告诉你肥胖有对可怕,  纪录片的名字叫——解剖肥胖!▼  纪录片中,两位解剖病理学专家Michea... 查看详情

爬虫需要什么http代理

先说网络爬虫为何要换IP,由于很多网址都会对网络爬虫行为采取识别,如果认定你的行为是网络爬虫,便会锁死你的IP,造成网络爬虫抓取不了信息,防止反爬虫的办法有很多,比如说降低采集速度,或是换IP来躲避网址的检测... 查看详情

有人知道我可以使用的基于 Python 的优秀网络爬虫吗?

...2010-09-2923:21:46【问题描述】:我有点想自己写,但我现在真的没有足够的时间。我已经看过opensourcecrawlers的***列表,但我更喜欢用Python编写的东西。我意识到我可能只使用Wikipedia页面上的一种工具并将其包 查看详情

网络爬虫到底违法吗?转行做爬虫可行吗?(代码片段)

...,但我认为较难,因为爬虫做深了以后是需要你了解各种相关领域知识的,而你现在对这些领域的东西一无所知,甚至可能连编程都还不知道怎么开始,起点会比有基础的人低很多。3.爬虫工作日常如何?... 查看详情

爬虫python入门难学吗

...览器抓包分析真实请求或者学习Selenium来实现自动化。2.了解非结构化数据的存储爬回来的数据可以直接用文档形式存在本地,也可以存入数据库中。开始数据量不大的时候,你可以直接通过Python的语法或pandas的方法将数据存为cs... 查看详情

python爬虫如何分析一个将要爬取的网站?

...点”,那么是时候告诉你scrapy-redis了。 参考技术B首先要了解http知识。 查看详情

简述第一文《为啥选择爬虫,选择python》

...作原理进行更深层次地理解。有的朋友希望能够深层次地了解搜索引擎的爬虫工作原理,或者希望自己能够开发出一款私人搜索引擎,那么此时,学习爬虫是非常有必要的。简单来说,我们学会了爬虫编写之后,就可以利用爬虫... 查看详情

03网络面经:你真的了解cookie和session吗?

...题。如果只是机械的回答一下它们的区别,那你可能真的不了解Cookie和Session,就更别说灵活运用了。这篇文章带你从Cookie和Session的初级应用到高级应用捋一遍,看看有多少不知道的内容。什么是Cookie?我们知道HT... 查看详情

03网络面经:你真的了解cookie和session吗?

...题。如果只是机械的回答一下它们的区别,那你可能真的不了解Cookie和Session,就更别说灵活运用了。这篇文章带你从Cookie和Session的初级应用到高级应用捋一遍,看看有多少不知道的内容。什么是Cookie?我们知道HT... 查看详情

python为啥会被叫爬虫?

...并不是爬虫,但是有时候会被叫爬虫。Python爬虫工程师,真的有这个岗位的,想学习Python爬虫,去黑马程序员看看吧!参考技术APython爬虫的出现给许多网络工作者爬取信息提供非常大的便利,不但方便快捷还进一步提高了工作... 查看详情

能把爬虫讲的这么透彻的,没有20年功夫还真不行0基础也能看懂

...s协议二、爬虫的基本流程1.爬虫的4步2.Request和Response三、了解Request1.请求方式2.请求URL3.请求头4.请求体5.实操查看Request四、了解Response1.响应状态2.响应头3.响应体五、爬虫能获取到什么样的数据?六、如何解析数据?七、... 查看详情

别说你会装系统!

...会重装系统!听到这话,我只能呵呵了,我就一个问题:真的每个人都会安装一个合格的万能系统吗 查看详情

docker知识全面讲解

...多,但是只要你一步步的做下去,肯定会对docker有更深的了解。这篇文档主要是说明docker的使用,没有实际例子,下篇文档会以实例为主。注:部分图片来自于网络,感谢分享的人。志不坚者智不达!!!1.docker介绍1.1虚拟机与... 查看详情

一篇文章带你了解网络爬虫的概念及其工作原理

众所周知,随着计算机、互联网、物联网、云计算等网络技术的风起云涌,网络上的信息呈爆炸式增长。毋庸置疑,互联网上的信息几乎囊括了社会、文化、政治、经济、娱乐等所有话题。使用传统数据收集机制(如问卷调查法... 查看详情