我是否需要使用Ajax来不被视为机器人?

tl; dr:有人能指出我在正确的方向复制通过Ajax在Chrome扩展中抓取网页…但在node.js? 我想采取相关的教程,但不知道从哪里开始。

== ==目标
作为教自己编码的一种方法,我构build了一个node.js应用程序来拉我的Goodreads.com书单( 使用Goodreads的API ),然后search旧金山公共图书馆的Overdrive目录(一个不包含在Goodreads的API)。 我对第二部分有挑战。

我正在使用Chrome扩展程序Goodreads( https://github.com/rhollister/goodreads )作为指导,而且我正在取得进展 – 上周,我学到了所有有关正则expression式(令人沮丧的有趣)。

== ==问题
当我使用http.request(library_search_url)时,该站点将返回一个警告:“访问此function已针对networking机器人禁用”。 看扩展代码,似乎他们在后台窗口中使用Ajax来刮页面。

== ==问题
我试图根据这里的一些研究来改变我的要求(例如, Node不能刮取某些页面 ),但是这并不奏效。 我是否需要学习expression,并做这样的事情( http://mherman.org/blog/2013/10/20/handling-ajax-calls-with-node-dot-js-and-express-scraping-craigslist/ )为了达到我想要的? 如果不是这样,我还有其他的方法可以学习吗?

(注:我不是在寻找代码本身 – 只是一个方向,所以我可以去学习我需要学习的东西。)

谢谢!

对于上下文,下面是使我认为这是基于Ajax的抓取的代码:

$.ajax({ url: url, success: parseODResults(bookSearchTerms, l, libraryShortName, libraryStr, library.newDesign, searchTerm, url), error: function(request, status, error) { if (sender) { chrome.tabs.sendMessage(sender.tab.id, { type: 'FROM_AG_EXTENSION' + id, error: error }); } }, xhr: function() { return jQuery.ajaxSettings.xhr(); } }); 

AJAX是为客户(即浏览器),忘了它。 您的问题可能与未在http.request()设置的用户代理有关,因此网站不知道谁在请求信息并将您的请求规定为web-bot问题User-Agent是标准的HTTP标头,例如将其设置为Firefox的ua或任何现有的浏览器,它应该是好的,例如:

 var options = { hostname: 'goodreads.com/something', method: 'GET', headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586' } }; 

然而,当有一个可用的logging的API,这是不好的做法,以废除HTML页面: http : //www.goodreads.com/api你应该把那个github页面放在一边…