Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 推特API与网络抓取?_Ruby On Rails_Ruby_Twitter_Nokogiri_Mechanize Ruby - Fatal编程技术网

Ruby on rails 推特API与网络抓取?

Ruby on rails 推特API与网络抓取?,ruby-on-rails,ruby,twitter,nokogiri,mechanize-ruby,Ruby On Rails,Ruby,Twitter,Nokogiri,Mechanize Ruby,首先,我想获得我的twitter帐户的所有追随者。我做了一些研究,发现我们可以使用RubyonRails使用Nokogiri或MechanizeGems进行web抓取。我还得到了一个css选择器用于网页抓取。现在,如果我查找HTML页面源代码,它不会显示该帐户的所有追随者 我真的可以使用网页抓取代码来获取我所有的twitter关注者吗?还是应该使用twitter API?当服务没有提供API或者API没有充分提供您所需的所有功能时,网页抓取通常是最后的手段 我将首先研究API。这就是它的设计目的

首先,我想获得我的twitter帐户的所有追随者。我做了一些研究,发现我们可以使用RubyonRails使用Nokogiri或MechanizeGems进行web抓取。我还得到了一个css选择器用于网页抓取。现在,如果我查找HTML页面源代码,它不会显示该帐户的所有追随者


我真的可以使用网页抓取代码来获取我所有的twitter关注者吗?还是应该使用twitter API?

当服务没有提供API或者API没有充分提供您所需的所有功能时,网页抓取通常是最后的手段

我将首先研究API。这就是它的设计目的

网页抓取可能会有问题,因为网站的结构可能会发生剧烈的变化,使代码无法正常工作

通常,公共API倾向于具有某种契约,即所提供的数据不会发生重大变化。如果有更改,API将提供API的版本控制(能够调用旧版本的API)或文档,以提供有关更改内容和更改时间的信息

此外,网络抓取还有其他成本,比如额外的带宽。从API获得的数据通常在应用程序中更有用


还有相当多的库(RubyGems),它们将提供访问所需API所需的许多基本功能。它们通常也会在API更新时更新。

一般来说,尽可能使用API

顾名思义,使用“scraping”只处理应用程序的“surface”,用MVC术语来说就是它的(HTML)视图。这些观点随时可能改变——想想推特和其他类似服务经历了多少次站点重新设计。如果您正在抓取,那么每个站点的重新设计,即使是一个小的重新设计,都很可能会破坏您现有的代码,迫使您(在没有警告的情况下)根据猜测进行疯狂的更新

Nokogiri和Mechanize是功能强大的工具,但它们永远无法与API的功能性、稳定性和一致性相比,API直接访问数据库内容,完全绕过不断变化的“表面”。在Twitter的例子中,API包装器(如用于访问API的API)的附加好处是,它为API添加了一个用户友好的层,使其更容易集成到应用程序中


总而言之:使用API,可能通过一个API包装器,比如Twitter gem。

好吧,换一种方式问:为什么不使用提供的API?如果没有[正当的]理由,则使用API。这就是他们创作它的目的。它是受支持的,是为完成任务而设计的,并且可以节省大量工作(更不用说带宽和服务器开销了)。我不确定我们是否可以在公司帐户中使用twitter API。但似乎API是最好的选择。