Python爬虫基础-Requests

您好,我是沧沧凉凉,是一名前端开发者,目前在掘金知乎以及个人博客上同步发表一些学习前端时遇到的趣事和知识,欢迎关注。


爬虫讲解

网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

Python的Requests库是一个非常好的网络请求方案,它可以用来访问网络资源,同时它本身内置了非常多的功能,使得发起网络请求更加的方便。

在之前的那篇文章后面,我提到了使用Python直接对接口进行请求,然后添加假数据,那么具体要如何对接口直接进行请求呢?

什么是爬虫

其实所有能够发起网络请求的语言都能够做爬虫,但现在一提起爬虫都只会想到Python,是因为Python拥有比其它语言更为庞大的处理数据的库,比如numpy,pandas,甚至Python还有一个爬虫明星框架-Scrapy。

在现在这个大数据时代,从互联网上可以获得非常多的信息,那么如果要靠人来收集这些信息,并且进行一些处理的话,这个工作量是非常庞大的,举个例子,如果没有搜索引擎的存在,你怎么找到你想要的信息呢?一般来说就是靠一些网页指引网站,例如以前的hao123。

而搜索引擎就是大量的使用了爬虫技术,不断的通过爬虫访问各种网站,将网站的一些信息收集起来进行汇总,提取出关键信息,当用户使用搜索引擎时,根据提供的关键字,展示出相对应的网站的信息。

而由于搜索引擎的存在,所以如果你搜一些关键字,排名靠前的网站往往会得到更高的点击率以及曝光度,而每个搜索引擎都有一个属于自己的算法,通过算法对爬取到的网页进行排名,而有一部分公司为了让自己的网站在搜索引擎中的某些关键字得到更高的排名,而专门会招聘一些精通如何使网站得到高排名的人,而这些人在公司担任的岗位为-SEO(搜索引擎优化)。

但是有些人的某些网站的一些页面以及内容,不想让搜索引擎进行爬取怎么办?比如说:淘宝,淘宝就不希望你通过搜索引擎搜索关键字,然后找到对应的商品信息。那么这个时候就要说到一个爬虫界的君子协定-robots.txt。

robots.txt

robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。

robots.txt协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。注意robots.txt是用字符串比较来确定是否获取URL,所以目录末尾有与没有斜杠“/”表示的是不同的URL。robots.txt允许使用类似”Disallow: *.gif”这样的通配符。

这个协议也不是一个规范,而只是约定俗成的,有些搜索引擎会遵守这一规范,有些则不然。通常搜索引擎会识别这个元数据,不索引这个页面,以及这个页面的链出页面。

因为这个协议的存在,使用Scrapy编写爬虫的时候在某些情况下,如果你不关闭遵守robots协议,那么你什么数据都爬取不到。

同时如果某些网站使用了该协议,如果你擅自爬取了网站的某些数据而造成了该网站的损失,你还有可能承担一些法律责任。比如曾经百度就诉讼360违反robots协议,最后以360赔偿百度70万而告终。

就是因为这些案件的存在,所以爬虫算是一个灰色行业,如果你利用的不恰当,那你可能会承担一些法律风险。

善意爬虫与恶意爬虫

善意爬虫即对网站有意义的爬虫,最为常见的就是搜索引擎爬虫,而恶意爬虫即对网站无益的爬虫,同时还可能对网站带来一定的损失。

一般来说,我们通过爬虫去爬取网页上的数据,这种爬虫都是恶意爬虫,对你自己有利,对网站无益,反而增加了服务器的压力,所以很多网站会使用各种手段对爬虫进行限制,即反爬技术,而淘宝的反爬技术,基本是国内最为顶尖的,它拥有一套独特的算法来判断你是否为机器人,所以爬取淘宝数据的难度是非常大的,如果你短时间内使用爬虫爬取了大量的数据,那么淘宝甚至会封锁你的IP。

这个时候另一个行业就诞生了-卖IP池,专门提供一些列的IP让你使用爬虫爬取数据。

入门

那么了解了什么是爬虫,以及爬虫能干什么后,我们就可以正式开始讲解Requests这个库了。

Requests是一个Python HTTP库,在Apache许可证2.0下发行。这个项目的目标是使得HTTP请求更加简单和更对常人友好。Requests是没有缺省包含在Python内的最流行的Python库,它曾经被提议缺省的随Python一起发行。

Session

我个人是非常喜欢使用Session,因为它可以将你的请求头、Cookie、代理状态统统都保存下来,而不是每个请求都需要添加这些,你想想如果一个请求还好,如果几十个请求都需要添加请求头呢?是不是非常的麻烦。

最后

本篇文章中介绍了什么是爬虫,以及使用爬虫的一些风险,这并不意味着爬虫不值得学习,反而爬虫技术是非常值得学习的。

爬虫可以大大简化我们日常工作的某些操作,不光可以获得互联网上的海量知识,还能够对接口做一些测试工作,以及添加一些假数据,所以Requests库是在学习Python中必须要会用的一个库,包括后面需要使用pandas处理的大部分数据,都要使用Requests库从网络上面获取。