基于浏览器的客户端抓取

我想知道是否有可能通过用户的IP抓取外部(跨域)页面?

对于购物比较网站,我需要抓取e-com站点的页面,但是来自服务器的几次请求会让我被禁止,所以我正在寻找进行客户端抓取的方法 - 即从用户的IP请求页面并发送到服务器进行处理。


答案 1

不可以,由于一种称为同源策略的安全措施,您将无法使用客户端的浏览器从使用 JavaScript 的其他网站抓取内容。

不应该有办法规避这项政策,这是有充分理由的。想象一下,您可以指示访问者的浏览器在任何网站上执行任何操作。这不是你想要自动发生的事情。

但是,您可以创建一个浏览器扩展来执行此操作。JavaScript 浏览器扩展可以配备比常规 JavaScript 更多的权限。

Adobe Flash具有类似的安全功能,但我想您可以使用Java(而不是JavaScript)来创建一个使用用户IP地址的网络抓取工具。再说一遍,你可能不想这样做,因为Java插件被认为是不安全的(而且加载速度很慢!),而且并非所有用户都会安装它。

所以现在回到你的问题:

我需要抓取e-com网站的页面,但是来自服务器的几次请求会让我被禁止。

如果该网站的所有者不希望您以这种方式使用他的服务,则可能不应该这样做。否则,您将面临法律影响的风险(有关详细信息,请参阅此处)。

如果你处于“法律的黑暗面”,并且不在乎这是否违法,你可以使用像 http://luminati.io/ 这样的东西来使用真人的IP地址。


答案 2

基本上,浏览器是为了避免这样做而制造的...

大家首先想到的解决方案:

jQuery/JavaScript:访问 iframe 的内容

但在大多数情况下,它不适用于“最新”浏览器(<10年)

替代方案包括:

  • 使用服务器的官方 API(如果有)
  • 尝试查找服务器是否正在提供 JSONP 服务(祝你好运)
  • 在同一个域上,尝试跨站点脚本(如果可能的话,不是很道德)
  • 使用受信任的中继或代理(但这仍将使用您自己的IP)
  • 假装你是一个谷歌网络爬虫(为什么不,但不是很可靠,没有保证)
  • 使用黑客在客户端本身上设置中继/代理,我可以考虑java或可能的闪存。(在大多数移动设备上都不起作用,速度慢,Flash也有自己的跨站点限制)
  • 询问谷歌或其他搜索引擎以获取内容(如果您滥用它,则搜索引擎可能会出现问题...)
  • 只需自己完成这项工作并缓存答案,这样就可以卸载他们的服务器并降低被禁止的风险。
  • 您自己(您自己的网络爬虫)为网站编制索引,然后使用您自己的已编入索引的网站。(取决于信号源变化频率)http://www.quora.com/How-can-I-build-a-web-crawler-from-scratch

[编辑]

我可以考虑的另一个解决方案是使用YQL服务,以这种方式,它有点像使用搜索引擎/公共代理作为桥梁来检索信息。下面是一个简单的示例简而言之,您将获得跨域 GET 请求