ajax - 我是否需要使用 Ajax 才能不被视为机器人?

标签 ajax node.js bots

tl;dr:有人可以为我指明在 Chrome 扩展程序中通过 Ajax 复制抓取网页的正确方向吗...但在 Node.js 中?我想学习相关教程,但不知道从哪里开始。

==目标==
作为自学编码的一种方法,我正在构建一个 node.js 应用程序来提取我的 Goodreads.com 书单(使用 Goodreads 的 API),然后搜索旧金山公共(public)图书馆的 Overdrive 目录(Goodreads 的 API 中未包含的功能)。我在第二部分遇到了挑战。

我正在使用 Chrome 扩展可用 Goodreads ( https://github.com/rhollister/goodreads ) 作为指导,并且我正在取得进展 - 上周,我了解了有关正则表达式的所有知识(非常有趣)。

==问题==
当我使用 http.request(library_search_url) 时,该网站返回一条警告:“网络机器人已禁用对此功能的访问”。查看扩展代码,似乎他们在后台窗口中使用 Ajax 来抓取页面。

==问题==
我尝试根据此处的一些研究更改我的请求方式(例如 Node can't scrape certain pages ),但这不起作用。我是否需要学习express并做这样的事情(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() 中未设置用户代理有关,因此网站不知道谁在请求信息,并因网络机器人问题而排除您的请求。 User-Agent 是标准的 HTTP header ,例如将其设置为 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'
    }
};

但是,当有可用的记录 API 时,废弃 html 页面是不好的做法:http://www.goodreads.com/api你应该把那个 github 页面放在一边......

关于ajax - 我是否需要使用 Ajax 才能不被视为机器人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36275915/

相关文章:

javascript - 使用 angularjs 获取休息服务

javascript - 如何调用从 CouchDB 检索到的文档的函数?

python - 用 Python 爬虫?

python - Telegram bot 应该发送包含 "&"字符的 URL,但它只发送 URL 直到该字符,然后将其缩短

javascript - 通过 jquery 打印隐藏数据

javascript - 部署页面时 Jquery ajax 调用不起作用

javascript - 如何将数组传递给ajax post?

ios - Ionic 平台命令因 'Cannot read property ' split' of undefined' 突然失败

javascript - NPM 请求模块 - 正文与 json

mysql - 如何处理使用站内搜索和请求过多的 SQL 溢出的机器人?