理论上可以在不使用服务器端中间件技术的情况下在ActionScript3中构建蜘蛛吗?没有什么非常先进的(只访问HTML页面并将HTML作为文本返回到swf).
编辑 (问题已更新为更具体)
没有有效的策略文件,您无法访问随机域.但是您可以使用ExternalInterface并设置allowScriptAccess = always以在另一个浏览器框架中打开页面并通过JavaScript传递结果数据.
原始答案
从理论上讲,任何可以加载和解析网页的语言都可以用来抓取它们 - 问题是:你想要吗?
这里有几点需要考虑:
Flash/Flex主要用于客户端应用程序,即提供精细UI功能和/或可视化的程序.虽然它已经发展并演变成一个强大的编程环境 - 这是它最擅长的,所以它应该主要用于它.我的意思是:当然,如果有时间和耐心,你可以用纯汇编语言编写一个Web应用程序 - 但为什么不使用为此发明的工具呢?
ActionScript当然不是您构建HTML解析器的最快语言.该程序将运行单线程,一次只能在一台机器上运行.扩展可能是通过实施P2P网络完成的,但同样重要:该技术适用于其他方面,并且有一些解决方案可以更好地创建可扩展的搜索机制.
根据您要抓取的网页类型以及数量,您最终会获得大量数据.迟早,存储,索引和检索您收集的任何数据将比爬行本身更重要.
如果您选择基于文件工作,则必须至少使用AIR,因为标准ActionScript具有非常有限的文件读/写功能 - 如果没有异步访问方法(如FileStream),您的程序会变慢并且随着时间的推移响应也会降低.
此外,分布式解决方案将变得更加复杂,因为每个节点都必须保留索引结果的一部分,除了搜索和索引之外,您还必须实现某种查找机制,例如MapReduce.
因此,您可能希望使用现有的存储技术 - 数据库和/或搜索引擎.
总而言之,我强烈建议列出您希望蜘蛛拥有的重要功能:
谁将与您的计划合作,其目的是什么?
它是否意味着自动运行,或者您是否希望通过某种用户交互来控制它?
您要收集哪种数据,以及如何访问它?
您要存储多少数据,并且您是否拥有可以构建的基础架构?
一旦您回答了这些问题,您应该查看可能有助于您实现部分或全部功能的现有工具,并且只有在您完成之后,才能决定实施无法解决的技术.