当前位置:首页 > 每日看点

Python的爬虫如何应对robots.txt里内容奇怪的网站?

卡卷网1年前 (2025-04-05)每日看点244

爬虫需谨慎

爬虫是我们日常获取网络资源的一种方式,但网络上盛行一句话叫做 “爬虫爬的好,l a o饭吃到老”

我们在爬虫获取资源的同时也在违法边缘疯狂试探,谁都不知道明天会不会有 船票 寄到家。

所以只有遵纪守法,安全爬虫才能够有美好未来。

robots.txt

那如何才能安全爬虫,那就得遵守我们的 “君子协议:robots.txt”

为什么是“君子协议”

每一个正规网站应该需要一份 robots.txt,但它没有真正禁止爬虫的能力,它只是告诉你我有一份文件,这份文件里有我的规则,你想要调用我的内容,请遵守我的规则,如果不遵守我也没办法。

正因如此,你爬虫时可能不会有什么阻碍,直到收到 船票 法院告诉你,这里有一份 君子协议 你没有遵守,不好意思,你违法了。

Python的爬虫如何应对robots.txt里内容奇怪的网站?  第1张

君子协议

robots.txt 如何获取

一般来讲,所有的 robots.txt 可以在网站根目录获取,例如:

百度的robots.txtbaidu.com/robots.txt

qq的robots.txtqq.com/robots.txt

淘宝的robots.txttaobao.com/robots.txt

很简单,只要 “域名+/+robots.txt”,你可以很容易就获取这份协议。

Python的爬虫如何应对robots.txt里内容奇怪的网站?  第2张

robots.txt

robots.txt长什么样

User-agent: * Allow: /list/* Allow: /list/*?* Disallow: /*?*

这个是从 淘宝 获取的 robots.txt ,可以看到它是按行来说明协议,其中最主要为两部分:

  • User-agent:适用的爬虫名称, * 号表示所有爬虫
  • Allow 或 Disallow:允许或禁止的爬取路径

其他 robots.txt 参数还有:

  • Crawl-delay:设置的爬虫延迟时间
  • Sitemap:指定的网站地图

具体含义

我们以 淘宝robots.txt 来说明具体含义:

  • User-agent:*:所有爬虫都应遵守
  • Allow: /list/*:允许爬取以 /list/ 开头的地址,例如/list/category、/list/123等等
  • Allow: /list/*?*:允许爬取以 /list/ 开头并且包含 查询参数(?后的内容),例如/list/123?sort=asc、/list/category?filter=price等等
  • Disallow: /*?*:禁止爬取任何包含 查询参数(?后的内容),例如/product/123?ref=abc、/search?q=example等等
需要注意虽然因为 Disallow: /*?* 禁止了 类似 /list/123?sort=asc 这样的地址,但因为上面存在 Allow: /list/*?*,所以 /list/123?sort=asc 其实是被允许的。

robots.txt 地址可爬取检测代码

现在我们知道了 robots.txt 文件,所以只要我们遵守这个 君子协议,那么我们就在安全范围内了。

现在我们可以利用 python 来编写一个工具,它可以通过分析 robots.txt 文件,只要输入一个 url,它就给我们返回一个是否可爬取的判断,这样我们就能安心爬取啦!

代码

# -*- coding: utf-8 -*- from urllib.robotparser import RobotFileParser from urllib.parse import urlparse import re def can_crawl(url, user_agent='*'): parsed_url = urlparse(url) # 创建 RobotFileParser 对象 rp = RobotFileParser() # 设置 robots.txt 文件的 URL robots_url = f'{parsed_url.scheme}://{parsed_url.netloc}/robots.txt' rp.set_url(robots_url) # 读取并解析 robots.txt 文件 rp.read() # 判断是否允许爬取 # 检查基础路径是否允许 if rp.can_fetch(user_agent, parsed_url.geturl()): # 这里需要自己通过正则来适配新的规则 # if xxxxxx: # return False return True return False if __name__ == '__main__': target_url = 'https://taobao.com/asda?asdas=232' if can_crawl(target_url, user_agent="MyBot"): print(f'可以爬取: {target_url}') else: print(f'禁止爬取: {target_url}')

RobotFileParser 是属于我们内置 urllib 标准库的一个类,它可以进行 robots.txt 解析并判断 url 的合法性。

RobotFileParser 的协议支持有限,大部分情况下我们可以使用,但也会出现一些规则无法判断的情况,例如 Disallow: /*?*,这些规则需要你自己重新使用正则进行判断。

Python的爬虫如何应对robots.txt里内容奇怪的网站?  第3张

结尾

安全爬虫,遵纪守法,这是我们每个公民的义务和准则。如果你喜欢这篇文章,请给我一个赞吧!

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/04/12273.html

分享给朋友:

相关文章

那些极速版软件其存在目的是什么?

那些极速版软件其存在目的是什么?

我看了很多回答,其实都没有回答道点子上。 你知道极速版APP为什么叫极速版吗? 是他看视频更快吗?显然不是。 只是它的安装包体积更小,下载安装速度更快而已,所以叫极速版app。当然啦,现在极速版APP和原声版APP,安装包已经没有区别了,这…

有哪些好用不火的软件?

有哪些好用不火的软件?

20个无敌冷门的小众APP,好用到 内存爆了都不想卸载,个个是宝藏! 特别是第4、13、19个,大多数人都没玩过~ 1、【毒汤日历 】 – 你的每日快乐源泉 [iPhone/Android]好用指数:⭐⭐⭐⭐⭐ 下载地址:各大应用商店…

为什么我感受不到 1500 元的手机比四五千的差?

我长期使用两千元左右的安卓机,一天接近8小时的重度手机使用者。 某天我突然想试试看传说中非常赛艇的苹果。狠了心,砸了钱。七千大样买了爱疯。 就这?什么辣鸡玩意。而且因为我一直更新软件,用了两年爱疯就卡了。并没有传说中的用四五年不卡。 用了这…

自媒体如何快速起步?

自媒体如何快速起步?

有两种经验,可供参考。 第一种是:现象级的爆火、爆款,这种情况捞到钱,实现财务自由的人并不多,但确实存在。只不过非要说清楚为什么这个账号可以火、可以短时间内赚到普通人一辈子赚不到的钱,他们自己也不一定能说清楚,因为赶上了风口(内外部情况)。…

苹果为什么不做千元机?

苹果为什么不做千元机?

第一步,打开苹果官网,注意是.com,不是.cn; 第二步,点击iPhone,选择Compare iPhone; 第三步,选择最新iPhone 15系列,查看起售价格,分别为$1199,$999,$799。 这不妥妥的千元机吗,怎么苹果…

夸克浏览器受欢迎的原因是什么?

夸克浏览器受欢迎的原因是什么?

这是可以说的嘛~ 哈哈,它比较吸引我的几点是:安全无广、页面简洁、功能丰富、反应速度快...... 首页页面支持自定义,喜欢什么样子都可以自己调整,没有花里胡哨的各种资讯推送,热搜日报整理归纳好,想看再点开查看,看着舒适度直接拉满! 实…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。