Perplexity“隐形”爬虫行为被Cloudflare揭露
Cloudflare近日发布重磅文章,揭露AI搜索引擎Perplexity涉嫌使用“隐形”爬虫,绕过网站的抓取指令。简单来说,Perplexity在被网站明确拒绝抓取后,依然试图偷偷获取内容。此事件引发了关于AI伦理和数据所有权的广泛讨论。
文章详细指出,Cloudflare观察到Perplexity最初会使用其声明的爬虫用户代理(例如PerplexityBot
),但一旦遇到网站的阻止规则,它们就会切换到伪装成普通浏览器(例如macOS上的Chrome)的通用用户代理。更进一步,Perplexity还会频繁更换IP地址和自治系统号(ASN),试图隐藏其抓取行为,甚至直接无视或根本不获取robots.txt
文件。
Cloudflare的回应与行业反思
为了验证这一点,Cloudflare特意创建了多个全新的、未被索引的测试域名,并设置了严格的抓取限制,结果发现Perplexity仍然能够提供这些受限域名内容的详细信息。作为回应,Cloudflare已经将Perplexity从其“已验证机器人”列表中移除,并更新了其管理规则,以阻止这种隐形抓取行为。
文章还对比了“良好”的爬虫行为规范,强调透明、有目的、遵守规则的重要性,并以OpenAI为例,说明其爬虫如何尊重robots.txt
和网络层面的阻止。
社区热议:AI伦理与数据所有权
评论区对此展开了热烈讨论,大家普遍对Perplexity的这种行为表示担忧。许多开发者认为,这不仅违反了网络礼仪,也侵犯了内容创作者的自主权,质疑AI公司在数据获取上的道德底线。有人指出,这就像是有人被告知“请勿入内”后,却换身衣服偷偷溜进去。
但也有少数声音认为,robots.txt
并非法律强制,只是一个“君子协定”,而AI公司为了获取数据可能会采取更激进的策略。大家也讨论了这种“猫鼠游戏”的未来,认为网站防御技术和爬虫规避技术会不断升级。总的来说,这次事件再次引发了关于AI伦理、数据所有权以及开放网络未来的深刻思考。
PDF解析:理论与现实的巨大鸿沟
解析PDF文件是一个让无数开发者头疼的话题。理论上,解析PDF文件的流程相对直观:首先找到文件开头的版本头,接着定位到交叉引用表(xref)的指针,然后通过这个表找到所有对象的偏移量,最后构建预告字典(trailer dictionary)来找到根对象。PDF文件由一系列对象组成,这些对象可以相互引用,形成一个图结构。交叉引用表(xref)就像一个索引,记录了文件中每个对象的位置,这样解析器就不必扫描整个文件。文件末尾的startxref
标记会指向这个表的起始字节偏移量,而其上方的预告字典则提供了关键元数据,包括指向根对象的指针。
交叉引用表(xref)的“坑”
然而,现实世界远比规范描述的要混乱。作者指出,PDF规范更像是一种“社会构建”,而非严格的规则。在对近4000个PDF文件进行抽样分析后,发现约0.5%的文件存在startxref
声明错误。这些错误包括startxref
不在文件末尾或拼写错误,更常见的是文件开头存在“垃圾数据”导致所有字节偏移量错位。还有些情况是startxref
指针指向了xref表的中间,或者仅仅是“接近”xref表,差了一个空格或换行符。
更令人沮丧的是,即使startxref
指针正确,xref表内部的对象偏移量也可能不准确,甚至在同一个表中,部分偏移量正确而部分错误。此外,xref表本身的格式也可能不规范,比如xref
后面没有换行符,或者声明的对象数量与实际不符,甚至在表中混入了垃圾数据。
社区共鸣:PDF解析的“地狱模式”
这篇文章生动地描绘了PDF解析的“地狱模式”,完美诠释了为什么这个看似简单的任务能让开发者抓狂。评论区通常会对此深有同感,大家会讨论PDF规范的庞大和复杂性(1.7版本就有1300页),以及在实际应用中,为了兼容各种“不规范”的PDF文件,解析器必须变得异常“宽容”。这正是“健壮性原则”的体现:在发送时要严格,在接收时要宽容。许多开发者都分享过自己与PDF搏斗的经历,感叹那些能够成功解析并渲染各种奇葩PDF的工具(如Adobe Acrobat、PDF.js)背后付出了多少努力。这不仅仅是技术挑战,更是一种对耐心和毅力的考验,也凸显了开源项目如PdfPig在解决这些实际问题上的巨大价值。
AI如何改变编程:强类型语言的崛起
这篇文章探讨了AI工具如何改变我们编程的方式,特别是它如何让强类型语言在“vibecoding”(也就是快速原型开发)方面变得比动态类型语言更具优势。作者指出,自从像Claude Code这样的AI工具出现后,他编程习惯发生了巨大变化。过去他习惯用Python进行快速原型开发,但现在即使是不熟悉的TypeScript、Rust和Go等强类型语言,也能通过AI工具高效管理项目。
AI辅助下的“Vibecoding”新范式
作者认为,强类型语言由于其固有的安全保障,在AI的辅助下反而更适合这种“vibecoding”模式。这听起来有点反直觉,因为我们通常认为动态语言更灵活、原型开发更快。但作者发现,对于达到一定规模的项目,结合Claude Code和Rust甚至比结合Claude Code和Python移动得更快、更安全,尽管Rust代码更底层。这完全得益于AI工具的能力。
例如,在重构大型TypeScript前端代码时,Claude Code每次完成任务后都会运行tsc
确保代码编译通过,这让作者能以惊人的速度进行大规模修改,并且这些修改不仅没有引入bug,反而提高了稳定性。尽管LLM是一种“有漏洞的抽象”,但它们现在已经足够好用,解决了Python过去为作者提供的“快速原型开发”问题,同时避免了Python的缺点,比如较低的安全保障、性能瓶颈和潜在的歧义。基于此,作者预测Python在公司,特别是生产部署中的采用率将会下降,尽管他个人非常喜欢Python