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

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

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

爬虫需谨慎

爬虫是我们日常获取网络资源的一种方式,但网络上盛行一句话叫做 “爬虫爬的好,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

分享给朋友:

相关文章

到什么程度才叫精通 Linux?

我们医院有个大牛。 有一次,我的Linux电脑下载了Microsoft office 365 不能运行。于是买了2.5升装康师傅冰红茶找到大牛,让他帮忙解决。 大牛白了我一眼,让我把安装包发给他,只见他输入一个命令将安装包打开,整个屏幕都是…

MacOS真的比Windows流畅吗?

我现在公司配的机器,配置是绝对的大古董了 惠普z230sff薄塔 cpu只是个4770,没错不是4790k,4770全核睿频只有3.8g 显卡更是古董,k600,已经结束驱动更新支持了,显存仅1g,跑分跑不过13代uhd核显 内存是加到16…

为什么这次 Mac mini 的 M4 版本价格这么低?

为什么这次 Mac mini 的 M4 版本价格这么低?

扫了一眼这里的回答,目测没几个人真买过 Macbook、Mac mini且真正当主力工作机用过。 这个初始(丐版)版本的机器实际谈不上多便宜,备受热捧有几个原因。 它这代产品整体做了重新设计,大幅缩减了尺寸,真正称得上 Mini 了。…

如何看待 Luv Letter 表示影视飓风专业性实在是让人失望?

一点儿新进展,另外以下有部分需要关注 对于统一变量的问题。这个我在对比上面有写小字解释,我在一开始使用ffmpeg来控制变量。但是发现了不少问题,比如因为遗留bug,会强制将非整数帧的素材转码为VFR导致无法正确帧间对比,因此不考虑,同时尽…

抖音小店三个月了一单没出,也没有流量,一个星期好像都没有一个点击,怎么办?

抖音小店三个月了一单没出,也没有流量,一个星期好像都没有一个点击,怎么办?

好消息,你有毅力上200多个品,还能坚持三个月 坏消息,一单没出 我感觉你还是别碰抖店了,甚至电商平台都别碰 你没这个缘分 我要是这样,我得用一百辆叉车叉死我自己 你如果还想坚持,我直接给你这套至少价值19800学来的新思路 简单来说就是…

什么时候你意识到做技术永无出路?

什么时候你意识到做技术永无出路?

2016年,帮一个朋友的忙,写了个软件给他的工作室用, 象征性的收了5000块钱。 大概过了三四年吧,他酒后吐真言,这个软件在他这个细分行业,很有用,他这几年把我写的这个软件卖了很多份出去,收益远超30万。 因为是离线软件,给他的就是一个e…

发表评论

访客

看不清,换一张

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