当前位置:首页 > 每日看点 > 正文内容

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

卡卷网7个月前 (04-05)每日看点89

爬虫需谨慎

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

分享给朋友:

相关文章

怎么免费看电视地方台和央视台?

怎么免费看电视地方台和央视台?

免费看央视和地方台,办法当然有,而且太多了,我怕你挑花了眼用不过来……首先题主需要明确一点,你家的电视需要是基于安卓系统的智能电视,能安装第三方安卓电视软件。比如小米电视、雷鸟电视等等;如果不是,你至少需要购置一个电视盒子,比如小米电视盒子...

Redmi 为什么可以把性价比做得那么高?

一位修手机的老大哥曾经跟我说过,红米1那个手机,除了处理器还凑活,其余零部件,就是市面上山寨机那种。其实红米性价比并不算极致,而且一直都有竞争者,从原来的群魔乱舞,到后来的荣耀,魅蓝,一加,再到现在的IQOO和realme。红米的方法也很简...

下一个风口最可能是什么?

下一个风口最可能是什么?

肯定是一带一路了,国内没什么卷的空间了,现在国家正在给一带一路的第三世界国家建设基础设施,等交通打通之后,就是通信打通,通信打通就是贸易打通,未来我建议大家重仓小语种,阿拉伯语最值得学(也有其他小语种自己去查一带一路国家),将来去其他国家随...

网易云音乐上看到过最触动的热评是什么?

网易云音乐上看到过最触动的热评是什么?

1.“昨天晚上洗澡的时候,我忘记拿毛巾了,喊了声妈妈帮我拿下毛巾,正当我伸出左手准备接毛巾的时候,我愣了一下,又换了右手。”希望你永远不会听懂这句话,永远都不要懂。——网易云热评《关键词》2.小时候跟着父亲去城里卖西瓜,害怕同学会看到我,就...

荣耀magic 7 首发的应该都收到货了,感觉怎么样?

8号入手magic7,跟mate40pro比。优点:1、电池真耐用,充电块,华为电池也是新换的但是明显荣耀耐用;2、系统明显快多了,mate40pro下半年开始卡的不行,实在受不了了。3、声音、震动效果提升明显,指纹反应灵敏很多。 缺点:1...

抖音上有一些账号搬运别人的视频,几乎一模一样,也没判搬运,他们是怎么做到的??

对于任何短视频平台来说,如何用最低的成本快速实现伪原创搬运都是需要解决的问题。所有的短视频平台,包括抖音、快手、tiktok、视频号、小红书、B站,甚至是FB、推特、INS、YouTube,它们的查重技术都是类似的,只要你在网络环境设置得当...

发表评论

访客

看不清,换一张

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