基于浏览器的客户端抓取

3zz*_*zzy 17 javascript php jquery web-scraping phantomjs

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

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

Joh*_*uer 30

不,由于称为同源策略的安全措施,您将无法使用客户端的浏览器使用JavaScript从其他网站中删除内容.

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

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

Adobe Flash具有类似的安全功能,但我想您可以使用Java(而不是JavaScript)来创建使用用户IP地址的Web抓取工具.然后,您可能不希望这样做,因为Java插件被认为是不安全的(并且加载速度慢!)并且并非所有用户都会安装它.

所以现在回到你的问题:

我需要抓一个电子com网站的页面,但服务器的几个请求会让我被禁止.

如果该网站的所有者不希望您以这种方式使用他的服务,那么您可能不应该这样做.否则,您将面临法律影响(详情请见此处).

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

  • 所以我的问题确实没有破解或解决方法,因此我决定使用浏览器插件/扩展程序和移动平台的混合应用程序。 (2认同)

Fla*_*ken 5

基本上浏览器是为了避免这样做......

大家首先想到的解决办法:

jQuery/JavaScript:访问 iframe 的内容

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

替代方案是:

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

[编辑]

我能想到的一种解决方案是使用YQL服务,这种方式有点像使用搜索引擎/公共代理作为桥梁来为您检索信息。 这是一个简单的例子简而言之,你得到跨域的 GET 请求