通过javascript获取网页文本

时间:2009-12-10 08:28:56

标签: javascript

是否有一个JavaScript语句可以从网页中检索内容/文本?

4 个答案:

答案 0 :(得分:4)

您可以使用Range s / TextRange来完成此操作。这样做的好处是只能在页面上获取可见文本(例如,与非IE浏览器中元素的textContent属性不同,这也会为您提供<script>的内容以及其他可能的内容元件)。以下内容适用于所有主流浏览器,但我不能保证不同浏览器之间换行符的一致性。

2012年11月更新

这些天我认为这不是一个好主意。虽然现在指定了Selection its toString() method is not,并且有一段时间(包括Microsoft在为IE 9实现它时),但指定它的行为类似于textContent。对于这种特殊的方法,自2009年以来,浏览器的一致性变差而不是更好。

function getBodyText(win) {
    var doc = win.document, body = doc.body, selection, range, bodyText;
    if (body.createTextRange) {
        return body.createTextRange().text;
    } else if (win.getSelection) {
        selection = win.getSelection();
        range = doc.createRange();
        range.selectNodeContents(body);
        selection.addRange(range);
        bodyText = selection.toString();
        selection.removeAllRanges();
        return bodyText;
    }
}

alert( getBodyText(window) );

答案 1 :(得分:1)

这有点奇怪。你的意思是<p><span>之类的标签还是像<title>那样更险恶的东西?如果你要整整一页,你确定你需要在JS中这样做吗?听起来像是XSS攻击:P

另外,我不知道有什么内置会这样做,但是你总是可以编写一个函数来使用document.getElementsByTagName访问DOM并以这种方式删除文本。

答案 2 :(得分:1)

如果您要抓取的页面来自同一个域,那么它非常直接。您只需使用AJAx将该页面作为文本,然后从那里找到您想要的内容。这是一个例子:

  

<script>
  function ajax(url, callbackFunction) {
    var request =  new XMLHttpRequest();
    request.open("GET", url, true);
    request.setRequestHeader("Content-Type",
      "application/x-www-form-urlencoded");

    request.onreadystatechange = function() {
      var done = 4, ok = 200;
      if (request.readyState == done && request.status == ok) {
        if (request.responseText) {
          callbackFunction(request.responseText);
        }
      }
    };
    request.send();
  }

  var buttonClicked = function () {
    ajax('/~jedi/index.html', getComplete);
  }

  var getComplete = function (text) {
    alert(text);
  }
</script>

  

<button onclick="buttonClicked()">Debug</button>

如果该网页来自其他网域,则表示您运气不佳。您需要在服务器上执行此操作。您可以使用IFrame从其他域加载页面上的数据(您可以通过编程方式创建不可见的IFrame),但由于安全策略,浏览器不允许您读取该数据。

答案 3 :(得分:-1)

如果您只想要当前所在页面的HTML内容:

var html = document.getElementsByTagName('html')[0].innerHTML;

如果您想将HTML用于另一个页面Google“Ajax”