首先,我想获取我的Twitter帐户的所有关注者。我进行了一些研究,发现我们可以使用:Nokogiri或Mechanagize Gems在Ruby上与Ruby进行网络刮擦。我还有一个用于网络刮擦的CSS选择器。现在,如果我查找它,HTML页面源将不会显示帐户的所有关注者。
我可以真正使用Web刮擦代码获取所有Twitter关注者,还是应该去Twitter API?
一般术语,在可能的情况下绝对使用API。
顾名思义,在"刮擦"中,您只是用MVC术语来处理应用程序的"表面"(HTML)视图。这些视图在任何瞬间都可以改变 - 考虑一下Twitter和其他类似服务进行了多少次重新设计。如果您正在刮擦,那么每个站点重新设计,即使是次要的网站,也可能会破坏您的现有代码,迫使您(无警告)根据猜测进行疯狂的更新。
nokogiri和机械化是强大的工具,但是它们永远不会与API的功能,稳定性和一致性进行比较,API可以直接访问数据库内容,从而绕过不断变化的" Surface"。对于Twitter,您将获得API包装器的额外好处,例如Twitter GEM用于访问API,该API添加了一个用户友好的层,使其更容易集成到您的应用程序中。
总结:使用API,可能是通过API包装器(例如Twitter Gem)。
当服务不提供API或API不足以提供所需的所有功能时,网络刮擦通常是最后的手段。
我会先研究API。这就是它是为了设计的。
Web刮擦可能是有问题的,因为网站的结构可能会大大更改并破坏您的代码。
通常,公共API倾向于拥有某种合同,而所提供的数据不会发生巨大变化。如果发生更改,API将提供API的版本(可以调用API的旧版本)或文档,以提供有关会更改以及何时发生的信息。
此外,网络刮擦还具有其他成本,例如额外的带宽。您从API获得的数据通常在应用程序中更有用。
也有很多库(Ruby Gems)提供许多您需要的基本功能来访问所需的API。当API更新时,它们通常也会更新。