一、网络爬虫引发的问题
网络爬虫根据尺寸可以分为三类:小规模、中规模和大规模。
其中小规模的爬虫一般是用于爬取网页,数据量不大而且对速度不敏感,一般使用requests库就足够了,占据了所有网络爬虫的90%以上。中规模的爬虫一般是用于爬取网站或者系列网站,数据规模较大且对速度敏感,需要使用scrapy库。而大规模的网络爬虫一般是搜索引擎,对速度要求严格,一般都是定制开发,全网范围内爬取。
不难发现网络爬虫对于服务器实际上是一种骚扰,在短时间内的大量访问,会对服务器产生大量的资源开销,同时由于网络爬虫可以获取网站中的资源,所以有时候对服务器数据也是一种威胁。
因此一般的网站都对网络爬虫做出了一定的限制,限制的方式主要有两种:来源审查和发布公告。
来源审查主要是判断http协议的头部的user-agent部分,通过对这个字段进行限制,只相应浏览器或者友好爬虫的访问。
发布公告则使用的就是这一节关键的Robts协议,通过告知所有爬虫该网站的爬取策略,让所有遵守规则的爬虫进行爬取。
二、Robots协议概述
Robots协议全称是Robots Exclusion Standard,即网络爬虫排除标准,主要是告知爬虫哪些资源可以爬取而哪些资源不可爬取,主要的方式是在服务器的根目录下放置一个robots.txt文件,在这个文件中利用标准的语法来告知想要爬的爬虫自己允许的范围。
一定要注意这个robots.txt文件一定要放在根目录下,如果根目录下没有则视为不支持Robots协议。
在实际使用时,协议的遵守主要是自动或者人工识别txt文件,识别文件内容之后再根据要求进行爬取。需要注意的是Robots协议是建议但并非约束性,可以不遵守但是存在法律风险。对于不同规模的网络爬虫要求也不一样:
三、爬取文件实例
这里按照网课里面的内容爬了壁纸网站的一张壁纸,先上代码:
import requests
import os
url = 'https://images3.alphacoders.com/569/569355.png'
root = 'C://Users//Binary//Desktop//'
path = root+url.split('/')[-1]
try:if not os.path.exists(root):os.mkdir(root)if not os.path.exists(path):r = requests.get(url)with open(path,'wb') as f:f.write(r.content)f.close()
except:print("error")
需要引入的库有两个:requests和os,前者用于网页的请求而后者用于对本地文件的写入。
首先要找好一张图片的url地址,并准备好本地的图片保存地址,第五行代码指的是将文件的名字直接作为本地的文件名保存在本地,之后为了防止出现异常,使用try-except,如果本地路径不存在就先创建一个这样的路径,之后如果对应路径下没有重名文件,就开始进行爬取,获取的response对象利用os库中的文件操作保存在本地,之后关闭即可。最后在对应路径下可以查看到保存下来的图片。