基于浏览器的客户端抓取
Browser-based client-side scraping
不知能否通过用户的IP抓取外部(跨域)页面?
对于购物比较网站,我需要抓取电子商务网站的页面,但来自服务器的多个请求会使我被禁止,所以我正在寻找进行客户端抓取的方法——也就是说,从用户的IP请求页面并发送到服务器进行处理。
不,由于称为 Same-origin policy.
的安全措施,您将无法使用客户的浏览器使用 JavaScript 从其他网站抓取内容
应该没有办法规避此政策,这是有充分理由的。想象一下,您可以指示访问者的浏览器在任何网站上执行任何操作。这不是你想要自动发生的事情。
但是,您可以创建一个浏览器扩展程序来执行此操作。 JavaScript 浏览器扩展可以比常规 JavaScript 拥有更多权限。
Adobe Flash 具有类似的安全功能,但我想您可以使用 Java(而不是 JavaScript)创建一个使用您用户的 IP 地址的网络抓取工具。再一次,你可能不想这样做,因为 Java 插件被认为是不安全的(而且加载速度很慢!)而且并不是所有用户都会安装它。
现在回到你的问题:
I need to scrape pages of an e-com site but several requests from the server would get me banned.
如果该网站的所有者不希望您以这种方式使用他的服务,您可能不应该这样做。否则,您可能会面临法律后果(查看 here 了解详细信息)。
如果您在 "dark side of the law" 上并且不在乎这是否违法,您可以使用 http://luminati.io/ 之类的东西来使用真人的 IP 地址。
基本上浏览器就是为了避免这样做...
大家最先想到的解决方案:
jQuery/JavaScript: accessing contents of an iframe
但在大多数情况下,它不适用于 "recent" 浏览器(<10 岁)
备选方案是:
- 使用服务器官方api(如果有的话)
- 尝试查找服务器是否提供 JSONP 服务(祝你好运)
- 在同一个域中,尝试跨站点脚本(如果可能,不太合乎道德)
- 使用受信任的中继或代理(但这仍将使用您自己的 ip)
- 假装你是一个 google 网络爬虫(为什么不是,但不是很可靠,也没有任何保证)
- 使用 hack 在客户端本身上设置中继/代理我可以考虑 java 或者可能是 flash。 (不适用于大多数移动设备,速度慢,Flash 也有其自身的跨站点限制)
- 请求 google 或其他搜索引擎获取内容(如果您滥用搜索引擎,您可能会遇到问题……)
- 你自己做这个工作并缓存答案,这是为了卸载他们的服务器并减少被禁止的风险。
- 自己索引网站(你自己的网络爬虫),然后使用你自己的索引网站。 (取决于源更改频率)
http://www.quora.com/How-can-I-build-a-web-crawler-from-scratch
[编辑]
我能想到的另一种解决方案是使用 YQL 服务,这种方式有点像使用搜索引擎/public 代理作为桥梁来检索给你的信息。
Here is a simple example to do so, 总之,你得到跨域GET请求
看看 http://import.io,它们提供了几个爬虫、连接器和提取器。我不太确定他们是如何绕过禁令的,但他们以某种方式做到了(我们使用他们的系统一年多了,现在没有任何问题)。
您可以使用 artoo 构建浏览器扩展程序。
http://medialab.github.io/artoo/chrome/
这将允许您绕过相同的源策略限制。都是javascript而且在客户端。
不知能否通过用户的IP抓取外部(跨域)页面?
对于购物比较网站,我需要抓取电子商务网站的页面,但来自服务器的多个请求会使我被禁止,所以我正在寻找进行客户端抓取的方法——也就是说,从用户的IP请求页面并发送到服务器进行处理。
不,由于称为 Same-origin policy.
的安全措施,您将无法使用客户的浏览器使用 JavaScript 从其他网站抓取内容应该没有办法规避此政策,这是有充分理由的。想象一下,您可以指示访问者的浏览器在任何网站上执行任何操作。这不是你想要自动发生的事情。
但是,您可以创建一个浏览器扩展程序来执行此操作。 JavaScript 浏览器扩展可以比常规 JavaScript 拥有更多权限。
Adobe Flash 具有类似的安全功能,但我想您可以使用 Java(而不是 JavaScript)创建一个使用您用户的 IP 地址的网络抓取工具。再一次,你可能不想这样做,因为 Java 插件被认为是不安全的(而且加载速度很慢!)而且并不是所有用户都会安装它。
现在回到你的问题:
I need to scrape pages of an e-com site but several requests from the server would get me banned.
如果该网站的所有者不希望您以这种方式使用他的服务,您可能不应该这样做。否则,您可能会面临法律后果(查看 here 了解详细信息)。
如果您在 "dark side of the law" 上并且不在乎这是否违法,您可以使用 http://luminati.io/ 之类的东西来使用真人的 IP 地址。
基本上浏览器就是为了避免这样做...
大家最先想到的解决方案:
jQuery/JavaScript: accessing contents of an iframe
但在大多数情况下,它不适用于 "recent" 浏览器(<10 岁)
备选方案是:
- 使用服务器官方api(如果有的话)
- 尝试查找服务器是否提供 JSONP 服务(祝你好运)
- 在同一个域中,尝试跨站点脚本(如果可能,不太合乎道德)
- 使用受信任的中继或代理(但这仍将使用您自己的 ip)
- 假装你是一个 google 网络爬虫(为什么不是,但不是很可靠,也没有任何保证)
- 使用 hack 在客户端本身上设置中继/代理我可以考虑 java 或者可能是 flash。 (不适用于大多数移动设备,速度慢,Flash 也有其自身的跨站点限制)
- 请求 google 或其他搜索引擎获取内容(如果您滥用搜索引擎,您可能会遇到问题……)
- 你自己做这个工作并缓存答案,这是为了卸载他们的服务器并减少被禁止的风险。
- 自己索引网站(你自己的网络爬虫),然后使用你自己的索引网站。 (取决于源更改频率) http://www.quora.com/How-can-I-build-a-web-crawler-from-scratch
[编辑]
我能想到的另一种解决方案是使用 YQL 服务,这种方式有点像使用搜索引擎/public 代理作为桥梁来检索给你的信息。 Here is a simple example to do so, 总之,你得到跨域GET请求
看看 http://import.io,它们提供了几个爬虫、连接器和提取器。我不太确定他们是如何绕过禁令的,但他们以某种方式做到了(我们使用他们的系统一年多了,现在没有任何问题)。
您可以使用 artoo 构建浏览器扩展程序。
http://medialab.github.io/artoo/chrome/
这将允许您绕过相同的源策略限制。都是javascript而且在客户端。