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

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

卡卷网5个月前 (04-05)每日看点76

爬虫需谨慎

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

分享给朋友:

相关文章

个人站长为什么越来越少了?个人网站还能做吗?

个人站长为什么越来越少了?个人网站还能做吗?

在互联网快速发展的浪潮中,个人站长曾经有过辉煌的时代,但如今却面临着诸多困境,甚至走向 “死亡”。一、竞争激烈,难以立足如今的互联网行业,巨头林立,各大平台凭借着雄厚的资金、技术和资源优势,占据了绝大部分市场份额。无论是搜索引擎、社交媒体还...

创业容易吗?

创业容易吗?创建企业不一定是困难或令人生畏的。它可以从一个简单但有力的想法开始,比如小强意识到,如果洗手液能杀死真菌,尤其是拳击台上的真菌,就会更加有用。创业确实需要奉献精神、努力工作和仔细规划——这是没有办法的。虽然这本身可能并不容易,但...

现在做抖音的话,还有机会嘛?

现在做抖音的话,还有机会嘛?

之前我问过小杨哥一个问题:“现在抖音还好做吗?”疯狂小杨哥在抖音已经突破1亿粉丝,直播间10w的在线观看人数,日常带货随便一场也是上7位数的数据。现在抖音的市场好像已经被头部占领,资源靠前,普通人似乎已经没有机会了?下面是小杨哥对于做抖音的...

如果我们没有自己的手机操作系统,会出现所谓的“卡脖子”“安全”问题吗?

如果我们没有自己的手机操作系统,会出现所谓的“卡脖子”“安全”问题吗?

前段时间某某高管在微博发文表示:“其实我觉得,中国人需要的不是一个自己的手机os,而是一个全国产的微信,再搭配一些辅助功能。”这算是“安卓开源”开源的代表了吧。然而打脸来的如此之快,10月30日消息,在Linux内核疑似大规...

小米14和华为mate60怎么选?

手持荣耀20,用了五年多了,使用仍然较为流畅,但是电池不太行了,于是2024年8月在家乡的小米之家购买了小米14(12+256),用了快两个月吧,说说使用体验。 外观层面,由于我使用的荣耀20放在现在妥妥地属于小屏,习惯了小屏...

报名的网课分期付款怎么退?

你在你分期付款的订单下面有客服电话,直接打电话描述一下你的问题,你可以告诉他你是被恶意绑定的,在不了解有退学条件这一说的情况下报的课程,可能遇到消费者诈骗了,不承认有退学金,说是霸王条款,诈骗消费者,你若分期了先把自动续费关了,别让自己个人...

发表评论

访客

看不清,换一张

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