python网络爬虫——robots协议

本文介绍了Robots协议的基础知识,包括其基本语法、如何通过robots.txt文件控制搜索引擎爬虫的访问行为,以及高级应用如sitemap、元标记和爬取延迟设置等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Robots协议的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),它的功能是通过Robots文件告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,抓取的标准等。它以一个文本文件的形式放在网站的根目录中。

想要访问一个网站的robots协议,在其网页链接后添加 /robots.txt 访问即可,如果一个站点没有robots,txt文件,则说明其上所有数据皆可爬取。

robots基本语法:

User-agent:指定对哪些爬虫生效
Disallow:指定要屏蔽的网址

先说User-agent,爬虫抓取时会声明自己的身份,这就是User-agent,没错,就是http协议里的User-agent。robots.txt利用User-agent来区分各个引擎的爬虫,比如说google网页搜索爬虫的User-agent为Googlebot。

Disallow 行列出的是要拦截的网页,以正斜线 (/) 开头,可以列出特定的网址或模式。要屏蔽整个网站,使用正斜线即可;要屏蔽某一目录以及其中的所有内容,在目录名后添加正斜线;要屏蔽某个具体的网页,就指出这个网页。

(* 为通配符)

下面介绍一些实例:

允许所有的爬虫访问

User-agent: *
Disallow:

或者也可以建一个空文件 "/robots.txt" file。

禁止爬虫访问所有目录

User-agent: *
Disallow: /

禁止爬虫访问某些目录

User-agent: *
Disallow: /a/
Disallow: /b/
Disallow: /c/

禁止某些爬虫访问

User-agent: BadBot
Disallow: /

只允许某个爬虫访问

User-agent: MangCrawler
Disallow:
User-agent: *
Disallow: /

再来看一个例子

User-agent: *
Disallow: /?*
Disallow: /pop/*.html
User-agent: EtaoSpider
Disallow: /

这个稍微复杂点,京东有2个目录不希望所有的爬虫来抓。

同时,京东完全屏蔽了一淘网的蜘蛛(EtaoSpider是一淘网的蜘蛛)

Robots协议进阶知识

sitemap
爬虫会通过网页内部的链接发现新的网页。但是如果没有连接指向的网页怎么办?或者用户输入条件生成的动态网页怎么办?能否让网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页?这就是sitemap,最简单的 Sitepmap 形式就是 XML 文件,在其中列出网站中的网址以及关于每个网址的其他数据(上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度等等),利用这些信息搜索引擎可以更加智能地抓取网站内容。

新的问题来了,爬虫怎么知道这个网站有没有提供sitemap文件,或者说网站管理员生成了sitemap,(可能是多个文件),爬虫怎么知道放在哪里呢?

由于robots.txt的位置是固定的,于是大家就想到了把sitemap的位置信息放在robots.txt里。这就成为robots.txt里的新成员了。

节选一段google robots.txt:

Sitemap: http://www.gstatic.com/cultur...
Sitemap: http://www.google.com/hostedn...

(考虑到一个网站的网页众多,sitemap人工维护不太靠谱,google提供了工具可以自动生成sitemap。)

meta tag
其实严格来说这部分内容不属于robots.txt。

robots.txt的初衷是为了让网站管理员管理可以出现在搜索引擎里的网站内容。但是,即使使用 robots.txt 文件让爬虫无法抓取这些内容,搜索引擎也可以通过其他方式找到这些网页并将它添加到索引中。例如,其他网站仍可能链接到该网站。因此,网页网址及其他公开的信息(如指向相关网站的链接中的定位文字或开放式目录管理系统中的标题)有可能会出现在引擎的搜索结果中。如果想彻底对搜索引擎隐身那咋整呢?答案是:元标记,即meta tag。

比如要完全阻止一个网页的内容列在搜索引擎索引中(即使有其他网站链接到此网页),可使用 noindex 元标记。只要搜索引擎查看该网页,便会看到 noindex 元标记并阻止该网页显示在索引中,这里注意noindex元标记提供的是一种逐页控制对网站的访问的方式。

要防止所有搜索引擎将网站中的网页编入索引,在网页的部分添加:

<meta name="robots" content="noindex">

这里的name取值可以设置为某个搜索引擎的User-agent从而指定屏蔽某一个搜索引擎。

除了noindex外,还有其他元标记,比如说nofollow,禁止爬虫从此页面中跟踪链接。详细信息可以参考Google支持的元标记,这里提一句:noindex和nofollow在HTML 4.01规范里有描述,但是其他tag的在不同引擎支持到什么程度各不相同,还请读者自行查阅各个引擎的说明文档。

Crawl-delay
除了控制哪些可以抓哪些不能抓之外,robots.txt还可以用来控制爬虫抓取的速率。如何做到的呢?通过设置爬虫在两次抓取之间等待的秒数。这种操作可以进行缓解服务器压力。

Crawl-delay:5

表示本次抓取后下一次抓取前需要等待5秒。

注意:google已经不支持这种方式了,在webmaster tools里提供了一个功能可以更直观的控制抓取速率。

这里插一句题外话,几年前曾经有一段时间robots.txt还支持复杂的参数:Visit-time,只有在visit-time指定的时间段里,爬虫才可以访问;Request-rate: 用来限制URL的读取频率,用于控制不同的时间段采用不同的抓取速率。后来估计支持的人太少,就渐渐的废掉了,目前google和baidu都已经不支持这个规则了,其他小的引擎公司貌似从来都没有支持过。

防君子不防小人(君子协议)

Robots协议不是什么技术壁垒,而只是一种互相尊重的协议,好比私家花园的门口挂着“闲人免进”,尊重者绕道而行,不尊重者依然可以推门而入。目前,Robots协议在实际使用中,还存在一些问题。

(部分内容转自 https://www.jianshu.com/p/d16076661d40)

Python爬虫应用于抓取百度图片通常涉及使用第三方库如`requests`, `BeautifulSoup` 或者 `Scrapy`框架。以下是基本步骤: 1. **导入所需库**: 首先,你需要安装`requests`库来发送HTTP请求,以及可能需要的如`bs4`(BeautifulSoup4)用于解析HTML内容。 ```python import requests from bs4 import BeautifulSoup ``` 2. **发送GET请求**: 使用`requests.get()`函数获取百度图片搜索结果的网页源码。 ```python url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&stc=1&fr=&sf=1&fmq=1689375560990_R&pv=&ic=0&nc=1&z=&word=' + keyword response = requests.get(url) ``` 这里`keyword`是你想要搜索的图片关键字。 3. **解析HTML**: 使用BeautifulSoup解析返回的HTML,找到包含图片URL的部分。这通常涉及到查找`<img>`标签的`src`属性。 ```python soup = BeautifulSoup(response.text, 'lxml') img_tags = soup.find_all('img', src=True) # 查找所有有src属性的<img>元素 ``` 4. **提取图片URL**: 循环遍历`img_tags`,提取每个图片链接。 ```python image_urls = [img['src'] for img in img_tags] ``` 5. **保存图片**: 可以使用`requests`库下载图片到本地,如果图片地址是HTTP的话。记得处理可能出现的网络错误。 ```python for url in image_urls: try: response = requests.get(url, stream=True) with open(f'{keyword}_{i}.jpg', 'wb') as f: for chunk in response.iter_content(chunk_size=1024): if chunk: # filter out keep-alive new chunks f.write(chunk) except Exception as e: print(f"Failed to download {url}: {e}") ``` 6. **注意事项**: - 爬虫操作需遵守百度的robots.txt规则,并尊重版权,合理使用抓取数据。 - 实际操作可能会遇到反爬虫策略,可能需要设置延迟、用户代理等。 - 如果需要大规模抓取,最好使用Scrapy等专业的爬虫框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值