前言爬虫是一个非常有趣的技术。你可以利用爬虫技术获得一些别人得不到或需要付费的东西。它还可以自动爬取并保存大量数据,减少手动做的时间和精力的一些累人。可以说很多人学编程,不玩点爬虫确实少了很多乐趣。无论是业余、私活还是专业的爬虫,爬虫的世界确实很精彩。今天给大家讲讲爬虫,目的是让准备学习爬虫或者刚开始学习爬虫的人对爬虫有更深入更全面的了解。一、认识爬虫1、什么是爬虫?总之,我将向您介绍著名的爬虫:一种请求网站并提取数据的自动化程序。我们拆开来理解一下爬虫:请求一个网站就是向该网站发送请求,比如在百度上搜索关键字“Python”,这时候我们的浏览器就会向该网站发送请求;提取数据,数据包括图片、文字、视频等,都称为数据。我们发送请求后,网站会将搜索结果呈现给我们。这实际上是返回的数据。这时候,我们就可以提取数据了;自动化程序,也就是我们写的代码,实现了过程数据的自动提取,比如批量下载保存返回的图片,而不是我们一张一张的手动操作。2.爬虫的分类根据使用场景,爬虫可以分为三类:①通用爬虫(大而全)功能强大,采集范围广。它们通常用于搜索引擎。比如百度浏览器就是一个大型的爬虫程序。②专注爬虫(小而精)功能比较单一,只抓取特定网站的特定内容。比如去某个网站批量获取某个数据。这也是我们个人最常用的爬虫。③增量爬虫(只收集更新的内容)这实际上是一个迭代爬虫,专注于爬虫。它只收集更新的数据,不收集旧数据。相当于存在并且一直在运行,只要有符合条件的数据更新时,就会自动爬取新的数据。3.Robots协议在爬虫中,有一个Robots协议需要注意,也称为“网络爬虫排除标准”。它的作用就是告诉你哪些东西可以爬,哪些东西不能爬。我在哪里可以找到这个机器人协议?一般情况下,在网站首页的URL后面加上/robots.txt就可以直接查看了。例如,百度的Robots协议位于https://www.baidu.com/robots.txt。可以看到里面有很多url是规定不能爬取的,比如Disallow:/shifen/表示不能爬取当前的Disallow:/shifen和Disallow:/shifen下的子目录页面。事实上,这份机器人协议是君子协议。对于爬虫来说,基本就是口头约定。如果违反了,可能会被追究法律责任,但是如果不违反,爬虫是爬不到任何数据的,所以通常双方都睁一只眼闭一只眼,不要太嚣张就好了。二、爬虫的基本流程1、4步爬虫是如何工作的?爬虫程序大致可以分为四个步骤:①Initiatearequest通过HTTP库向目标站点发起请求,即发送一个Request,可以包含额外的headers等信息,等待服务器响应.②获取响应内容如果服务器能正常响应,就会得到一个Response。Response的内容就是要获取的页面内容。类型可能包括HTML、Json字符串和二进制数据(例如图片和视频)。③解析内容得到的内容可能是HTML,可以用正则表达式和网页解析库来解析。可能是Json,可以直接转为Json对象进行解析,也可能是二进制数据,可以保存或进一步处理。④保存数据保存数据的方式有很多种,可以保存为文本,也可以保存到数据库,也可以保存为特定格式的文件。基本上这是爬虫必须遵循的四个步骤。2.Request和ResponseRequest和Response是爬虫最重要的部分。Request和Response是什么关系?两者的关系如下图所示:简单理解,当我们在电脑浏览器上搜索某个东西时,比如前面提到的在百度搜索“Python”,你点击了百度,你向百度的服务器发送了一个请求被发送了,Request中包含了很多信息,比如身份信息,请求信息等,服务端收到请求后进行判断,然后返回一个Response给我们的电脑,Response中也包含了很多信息,如请求成功与否,如我们请求的信息结果(文字、图片、视频等)。这个应该很容易理解吧?接下来,让我们仔细看看Request和Response。3.了解RequestRequest中包括什么?主要包括以下内容:1.请求方式请求方式可以理解为你对网站的问候方式。如果你想从网站上获取数据,你必须用正确的方式问候它,它才能回应你,就像你想从别人家借东西,你必须敲门才能打招呼,如果你直接从窗户进去,任何人看到都得把你踢出去。主要的请求方式有GET和POST,还有HEAD/PUT/DELETE/OPTIONS等其他方式,其中GET是最常用的请求方式。2.请求URL什么是URL?URL的全称是UniformResourceLocator。比如一个网页文档、图片、视频等都有一个唯一的URL。在爬虫中,我们可以把它理解为一个URL或者一个链接。3.请求头什么是请求头?英文名称RequestHeaders通常是指请求中包含的头部信息,比如User-Agent、Host、Cookies等,这些东西相当于你向网站发送请求时的身份信息。很多时候需要把自己伪装成普通用户,让你的目标网站无法识别你是爬虫程序,避免一些反抓取问题,顺利获取。数据。4、请求体的官方声明是请求中携带的附加数据,比如提交表单时的表单数据。爬虫之间怎么理解呢?例如,在某些页面上,您必须先登录或必须告诉我您的请求。比如你在百度的网页上搜索“Python”,那么关键字“Python”就是你要携带的请求体。看到你的requestbody,百度就知道你要干什么了。当然,请求体通常用在POST请求方法中。在GET请求中,我们一般会拼接在URL中。理解到这里就够了,后续具体的爬虫可以加深理解。5、在实践中查看Request说完了Request的理论,我们就可以到实际操作中去看看Request在什么地方,包含什么内容。以谷歌浏览器为例,我输入关键字“Python”可以搜索到一堆结果。下面我们使用网页自带的控制台窗口来分析一下我们发送的Request。按住F12或者在网页空白处右击选择“Inspect”,然后可以看到控制台中有很多选项,比如在上方的栏目中有一个菜单栏。元素是初级爬虫常用的。还有Network(网络),其他的东西暂时不用,等你学习更高级的爬虫的时候会用到。比如你在逆向JS的时候可能会用到Applicationwindow,以后再了解。Elements包含所有请求结果的每一个元素,比如每张图片的源代码,尤其是当你点击左上角的小箭头时,你移动到的每一个地方都会在Elements窗口下显示为源代码。Network是爬虫常用的网络信息,包括我们的Request,我们来看一下,在Network窗口,勾选Disablecache(禁用缓存),点击All。刷新网页看看效果。可以看到我们发送了132个Requests。不要对此感到好奇。虽然我们只是向百度发送了一个“Python”的请求,但是其中的一些是附在网页上的。虽然里面有很多类型,什么图片格式是png,jpeg等等,但是你可以滑到最上面,在Type(类型)栏里有一个文档的类型,意思是web文档。单击它以获取我们的请求信息。点击文档进入后,有一个新的菜单栏。在Headers栏下,我们可以看到RequestURL,也就是我们前面提到的请求URL。这个URL就是我们实际向网页请求的URL,然后return有一个请求方法,可以看成是GET请求。再次向下滑动,还可以看到我们前面提到的RequestHeaders。信息很多,但是我们前面提到的User-Agent、Host、Cookies都有。这些是我们提供给服务器的信息。虽然RequestHeaders中的内容很多,但是我们在写爬虫程序的时候也需要做这方面的伪装工作,但是我们不必把所有的信息都写上去。我们可以选择性的写一些重要的信息,比如User-AgentMandatory,Referer和Host是可选的,登录的时候会包含cookies,常用的伪装只有4项。至于requestbody,这里暂时不去查看,因为这里的请求方式是GET请求,requestbody只能在POST请求中查看。没关系,等爬虫用到的时候你自然就明白了。4.理解ResponseResponse主要包括3块内容,我们一一来看。1、响应状态我们发送请求后,网站会返回给我们一个Response,其中包括响应状态码的响应状态,大致可以分为以下几类:①200的范围,例如响应状态代码200表示成功。②300范围,如301表示跳跃。③400范围,比如404找不到页面。④500范围,如502找不到页面。对于爬虫来说,二三百是我们最想看到的响应状态,是可以拿到数据的,四五百基本是冷的,拿不到数据。比如我们刚刚发送之前的Request请求时,在文档文件中,在Headers窗口下的General中,我们可以看到响应状态码为200,说明网页成功响应了我们的请求。2.Responseheader服务器给我们的信息也会包含响应头,其中包括内容类型、内容长度、服务器信息、设置cookies。其实responseheader对我们来说并没有那么重要,这里了解一下即可。3、响应体很重要,除了上面第一点的响应状态,就是它了,因为它包含了请求资源的内容,比如网页HTML和图片二进制数等。响应在哪身体?它也位于文档文件的Response列中。向下滑动可以看到里面有很多响应数据。这是我们得到的数据。有的可以直接下载,有的需要通过技术分析。得到它。5、爬虫能得到什么样的数据?爬虫可以获得什么样的数据?基本上可以分为几类:①网页文档,如HTML文档,Json格式文本等②图片,获取的二进制文件可以保存为图片格式。③视频也是二进制文件,保存为视频格式即可。④其他,反正其他能看到的东西理论上用爬虫也能搞定,看难易程度。6.如何解析数据?从前面看,我们发送请求成功后,网页会返回给我们很多数据,有几千甚至几万条代码,那么如何在这么多代码中找到我们想要的数据呢?常用的方法有:①直接加工。当网页返回的数据是一些文本时,就是我们想要的内容,不需要过滤,直接处理即可。②JSON解析。如果网页返回的是Json数据而不是HTML数据,那么就需要Json解析技术。③正则表达式。如果返回的数据符合正则表达式,则可以使用正则表达式进行分析。④其他分析方法。常用的有XPath、BeautifulSoup和PyQuery,都是爬虫常用的解析库。7、如何保存数据?获取数据后,常用的保存数据的方法有:①文本。可以直接保存为纯文本、EXCEL、Json、Xml等类型的文本。②关系数据库。数据可以保存到关系数据库,如MySQL和Oracle数据库。③非关系型数据库。比如MongoDB、Readis和Key-Value存储。④二进制文件。如图片、视频、音频等可以直接保存为特定格式。练习视频:Python爬虫:HTTPS协议Python爬虫:HTTP协议Python爬虫:header请求头和带参数的请求
