网络爬虫的尺寸大致分为3种:
而第一种大致占到了90%。由于网络爬虫的存在,服务器会因为网络爬虫造成很大的资源开销,比如一个普通人一定时间内访问上十次,而爬虫可能会访问十万次或者百万次。如果一个服务器性能较差,可能会承受不来这个规模的访问。因此网络上对爬虫有一定的制约,对于一些不友好的爬虫,甚至可能会涉及到触犯到法律。
现在一般的网站都会对爬虫做出限制,大致分为两种:
现在说一下第二种,Robots(Robots Exclusion Standard )协议,也叫机器人协议。
作用:告知爬虫网页上哪些内容可以爬取,哪些不行。
形式:在网站根目录下放置robots.txt文件。
比如我们用代码去获取京东的robots协议:
import requests
def getHTTPXML( url ):
try:
r = requests.get(url, timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return "产生异常"
if __name__=="__main__":
url = "http://www.jd.com/robots.txt"
print(getHTTPXML(url))
爬取下来的robots协议为:
User-agent: *
Disallow: /?*
Disallow: /pop/*.html
Disallow: /pinpai/*.html?*
User-agent: EtaoSpider
Disallow: /
User-agent: HuihuiSpider
Disallow: /
User-agent: GwdangSpider
Disallow: /
User-agent: WochachaSpider
Disallow: /
它是什么意思呢,我们来分析一下。
第一行*表示所有的,也就是说,对于所有的网络爬虫,它都定义为User-agent
意思就是说对于所有的网络爬虫,都应该遵守这个协议。
第二行什么意思呢?disallow表示不允许,?后面是*,表示?后面所有的东西,也就是说,它不允许任何爬虫访问任何以?开头的路径。
第三行表示任何爬虫都不允许访问pop/开头的路径。
第四行同理,符合这类的路径也不允许访问。
后面的又写了四个爬虫,EtaoSpider等等
他们被禁止的是根目录。这四种爬虫不允许爬取京东的任何资源。
也就是说这四种爬虫被京东定义为恶意爬虫,非法的获取过京东的资源,所以京东不允许这四类爬虫获取京东的任何资源了。
对于不遵守robots协议的爬虫,可能会存在法律风险。
所以大家也看到了,robots协议就是通过User-agent 和 disallow这两个基本语法来告知所有爬虫它内部能访问的权限。
有了这个的话,就相当于告知所有爬虫应该去遵守这个网站的规范,相当于制定了一个准则。
不同的网站会有不同的robots协议,我们也可以看看其他网站的robots协议。
来看一下百度的robots协议:
User-agent: Baiduspider
Disallow: /baidu
Disallow: /s?
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Googlebot
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: MSNBot
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Baiduspider-image
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: YoudaoBot
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Sogou web spider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Sogou inst spider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Sogou spider2
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Sogou blog
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Sogou News Spider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Sogou Orion spider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: ChinasoSpider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: Sosospider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: yisouspider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: EasouSpider
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
User-agent: *
Disallow: /
qq的robots协议:
User-agent: *
Disallow:
Sitemap: http://www.qq.com/sitemap_index.xml
新浪新闻的robots协议:
User-agent: *
Disallow: /wap/
Disallow: /iframe/
Disallow: /temp/
不是所有网站都有robots协议,比如国家教育部的网站就没有robots协议,它就默认为所有网络爬虫都可以无限制的去爬取这个网站。