基于浏览器的客户端抓取
我想知道是否有可能通过用户的IP抓取外部(跨域)页面?
对于一个购物比较网站,我需要抓一个电子com网站的页面,但来自服务器的几个请求会让我被禁止,所以我正在寻找方法进行客户端抓取 – 也就是说,请求用户的页面IP并发送到服务器进行处理。
不,由于称为同源策略的安全措施,您将无法使用客户端的浏览器使用JavaScript从其他网站中删除内容。
应该没有办法绕过这个政策,这是有充分理由的。 想象一下,您可以指示访问者的浏览器在任何网站上执行任何操作。 这不是你想要自动发生的事情。
但是,您可以创建一个浏览器扩展来执行此操作。 JavaScript浏览器扩展可以配备比常规JavaScript更多的权限。
Adobe Flash具有类似的安全function,但我想您可以使用Java(而不是JavaScript)来创建使用用户IP地址的Web抓取工具。 然后,您可能不希望这样做,因为Java插件被认为是不安全的(并且加载速度慢!)并且并非所有用户都会安装它。
那么现在回到你的问题:
我需要抓一个电子com网站的页面,但来自服务器的几个请求会让我被禁止。
如果该网站的所有者不希望您以这种方式使用他的服务,那么您可能不应该这样做。 否则,您将面临法律影响(详情请见此处 )。
如果你处于“法律的黑暗面”并且不在乎这是否非法,你可以使用像http://luminati.io/这样的东西来使用真人的IP地址。
基本上浏览器是为了避免这样做…
每个人首先考虑的解决方案:
jQuery / JavaScript:访问iframe的内容
但在大多数情况下使用“最近的”浏览器(<10岁)不会起作用
替代方案是:
- 使用服务器的官方api(如果有的话)
- 尝试查找服务器是否提供JSONP服务(祝你好运)
- 在同一个域上,尝试跨站点脚本(如果可能,不是很道德)
- 使用可信中继或代理(但这仍将使用您自己的IP)
- 假装你是谷歌网络爬虫(为什么不,但不是非常可靠,不保证)
- 使用hack在客户端本身设置中继/代理我可以考虑java或可能的flash。 (不适用于大多数移动设备,速度慢,闪存也有自己的跨站点限制)
- 询问谷歌或其他搜索引擎获取内容(如果你滥用它,你可能会遇到搜索引擎的问题…)
- 只需自己完成这项工作并缓存答案,这样可以卸载服务器并降低被禁止的风险。
- 自己索引网站(您自己的网络抓取工具),然后使用您自己的索引网站。 (取决于来源变化频率) http://www.quora.com/How-can-I-build-a-web-crawler-from-scratch
[编辑]
我能想到的另一个解决方案是使用YQL服务,这种方式有点像使用搜索引擎/公共代理作为桥梁来为您检索信息。 这是一个简单的例子 , 简而言之,您将获得跨域GET请求
看看http://import.io ,它们提供了几个爬虫,连接器和提取器。 我不太确定他们如何绕过禁令,但他们以某种方式(我们现在使用他们的系统超过一年没有问题)。
您可以使用artoo构建浏览器扩展。
http://medialab.github.io/artoo/chrome/
这将允许您绕过相同的orgin策略限制。 这是所有的JavaScript和客户端。