我想创建一个网络应用程序,用于组织和分析来自其他网站的信息。另一个网站没有API,因此我想从中获取所有HTML(在允许其脚本运行之后)并且可以使用jquery为我的Web应用程序分开。
我意识到PHP或其他服务器端语言是这个问题的真正答案,但我只知道前端的东西,只是想快速而又脏。除了我,没有人使用这个。
我现在想到实现这一目标的唯一方法是使用隐藏的iframe。有没有(相对)比这个解决方案更优雅?
答案 0 :(得分:3)
您可以使用 YQL 休息电话轻松完成此操作。
请参阅此处的示例:https://developer.yahoo.com/yql/guide/yql-select-xpath.html
基本上你只需要对雅虎的YQL服务器进行一些AJAX调用,它就会返回一个响应,在它里面你会找到你查询的页面的HTML。
Playground link - 正如您所见,REST查询位于页面底部。
google“使用phantomjs抓取网页”,您将获得准确删除和解析网页并获得最终结果所需的内容。
答案 1 :(得分:1)
实际上隐藏的iframe可能不起作用,因为大多数浏览器不允许来自一个窗口的javascript在另一个窗口(例如iframe)的上下文中运行。
为什么不使用jQuery.get()?
来获取HTML答案 2 :(得分:1)
您无法从IFrame访问DOM,因为它违反了跨源资源共享(CORS)规则。使用IFrame,您需要从相同的主机(即至少foo.com和bar.foo.com)提供两个帧 - 如果它们以任何方式与您有所不同,那么您必须显式设置document.domain
属性。它是这样的,因此页面只能将IFrame包含在您的银行/脸谱/其他具有敏感信息的网站上,并且只是窃取内容。 See MDN for more
如果您真的想从网站上提取HTML内容,那么使用JavaScript并不是一个最佳解决方案,因为有很多原因存在交叉来源政策。
答案 3 :(得分:1)
简单回答:否
现代浏览器不会让你这样做,否则他们会感到不安全。
可以找到in this question请求网页的方法的详细信息,但所有这些都要求您加入same domain。
我的建议:
选项A:关闭星期日(就像今天!)并学习一些基本的服务器内容。您已经了解JavaScript,您可以在一天内学会使用nodejs构建一个简单的Web服务器!
选项B:您真的不想触及后端内容。请考虑将您的应用构建为chrome app。在此方法中,您可以ask user politely从远程位置获取内容。
答案 4 :(得分:1)
你的目标是使用JavaScript实际上“屏幕刮”吗? 如果是这样,网站将无法运行(出于安全原因),但您可能仍有选择权。
您可以通过将Javascript粘贴到书签中来创建“书签”,前面带有javascript:
。然后,您只需打开网页,然后单击您的书签,即可执行您的代码。
我建议首先在实际的JavaScript文件中编写所有代码,然后将其粘贴到书签中。举个例子:
javascript:
alert("hello");