打开网页并使用 JavaScript 解析它

Posted

技术标签:

【中文标题】打开网页并使用 JavaScript 解析它【英文标题】:Open webpage and parse it using JavaScript 【发布时间】:2010-10-10 12:28:54 【问题描述】:

我知道 javascript 可以在新窗口中打开链接,但是否可以打开网页而不在窗口中打开或向用户显示?我想要做的是解析该网页的一些文本并将其用作变量。

这可能没有来自服务器端语言的任何帮助吗?如果是这样,请给我一个我可以实现的方向。

谢谢大家

【问题讨论】:

【参考方案1】:

您可以使用XMLHttpRequest 对象来执行此操作。这是一个简单的例子

var req = new XMLHttpRequest();  
req.open('GET', 'http://www.mydomain.com/', false);   
req.send(null);  
if(req.status == 200)  
   dump(req.responseText);

加载后,您可以在 req.responseText 成员上使用javascript regular expressions 执行解析/抓取。

更多细节...

实际上你需要做更多的事情来以跨平台的方式获取 XMLHttpRequest 对象,例如:

var ua = navigator.userAgent.toLowerCase();
if (!window.ActiveXObject)
  req = new XMLHttpRequest();
else if (ua.indexOf('msie 5') == -1)
  req = new ActiveXObject("Msxml2.XMLHTTP");
else
  req = new ActiveXObject("Microsoft.XMLHTTP");

或者使用库...

或者,您可以省去所有的麻烦,只需使用像 jQuery 或 Prototype 这样的库来为您处理这个问题。

同源政策可能会咬你...

请注意,由于same-origin policy,您请求的页面必须与发出请求的页面来自同一个域。如果你想请求一个远程页面,你必须通过服务器端脚本来代理它。

另一种可能的解决方法是使用 Flash 发出请求,如果目标站点使用适当配置的 crossdomain.xml 文件授予权限,则允许跨域请求。

这是一篇关于同源政策主题的好文章:

Same-Origin Policy Part 1: Why we’re stuck with things like XSS and XSRF/CSRF

【讨论】:

该死!我希望有一个外部页面,所以由于 CSC,JavaScript 不允许解析来自外部网页的文本? 解析不多,但禁止 XMLHttpRequest 从另一个域获取。解决方法是通过您自己的服务器端脚本请求,或者您可以尝试使用小型 iframe。 我现在明白了。那么它必须是服务器端的实现。 话虽如此,我知道只要目标站点配置为允许,Flash 可以让您进行跨域请求。将添加到答案【参考方案2】:

Whatever Origin 是一个开源库,允许您使用纯 Javascript 进行抓取。它还解决了“同域起源”问题。 http://www.whateverorigin.org/

$.getJSON('http://whateverorigin.org/get?url=' + encodeURIComponent('http://google.com') + '&callback=?', function(data)
    alert(data.contents);
);

【讨论】:

【参考方案3】:

您可以在 iframe 中打开新窗口:

http://www.w3schools.com/TAGS/tag_iframe.asp

但请注意,如果您打开的网站来自不同的 URL,则 Javascript 访问会受到限制。这是为了防止跨站脚本攻击:

http://en.wikipedia.org/wiki/Cross-site_scripting

【讨论】:

+1 如果网站不是我的并且不支持 pjson 回调,我会这样做【参考方案4】:

您可以尝试使用 fetch 和它的回调

fetch('https://api.codetabs.com/v1/proxy?quest=google.com').then((response) => response.text()).then((text) => console.log(text));

【讨论】:

【参考方案5】:

您将使用 AJAX。这将对相关 URL 发出 Get 请求并返回响应 html。 Jquery 让这变得非常简单,例如

$.get("test.php");

http://docs.jquery.com/Ajax

安德鲁

【讨论】:

以上是关于打开网页并使用 JavaScript 解析它的主要内容,如果未能解决你的问题,请参考以下文章

使用 javascript for 循环在一个网页中创建 100 个小 iframe

电脑上不了网网页左下角显示正在解析主机, 修改Dns没用

Javascript编程 :编一个小程序 如何让它自动打开一个网页,然后间隔10秒再自动关闭这个网页。如此循环。

浏览器输入URL后,发生了什么?(打开一个网页会使用哪些协议?)

JavaScript——网页解析过程

部分网页打开不开、速度慢是啥原因?