我是否需要使用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页面放在一边…
- 如何在没有E标记的情况下在我的Messenger软件中显示非常小的数字?
- 使用LUIS和Microsoft Bot Framework识别产品编号的最佳方法
- 等待一个Facebook Messenger的机器人的文本答复
- 是否有可能在Node.js中“需要”一个可访问导入文件全局作用域的对象?
- discord.js机器人回复自己 – 防止发生这种情况
- 如何在使用botframework的luisaction绑定的同时保持privateConversation数据?
- 与服务器端机器人获取位置数据
- 如何解决,如果EAI_AGAIN错误发生在Facebook Messenger平台上?
- 松弛斜线命令 – 显示用户input的文本?