2009-12-10 438 views
2

是否有JavaScript语句可以从网页中检索内容/文本?通过javascript获取网页文本

+0

可能的重复:http://stackoverflow.com/questions/822452/strip-html-from-text-javascript – 2013-05-10 19:31:10

回答

1

这是一种奇怪的事情。你是指<p><span>之类的标签或<title>之类的标签?你确定你需要在JS中做这个,如果你正在刮一整页?听起来像一个XSS攻击:P

副手,我不知道任何内置的,将做到这一点,但你总是可以写一个函数来访问DOM与document.getElementsByTagName和刮这样的文字。

3

您可以使用Range s/TextRange s。这具有仅获得页面上的可见文本的优点(例如,与非IE浏览器中的元素的textContent属性不同,其也将得到<script>的内容以及可能的其他元素)。以下内容适用于所有主流浏览器,尽管我无法保证不同浏览器之间换行符的一致性。

UPDATE 2012年11月

我不认为这是一个好主意,这些天。虽然Selection现在被指定,its toString() method is not,并在一段时间(包括当微软正在实施它的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)); 
0

如果你只是想在页面的HTML内容您目前使用的:

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

如果你想另一个页面的HTML谷歌“阿贾克斯”

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),但由于安全策略,浏览器不允许您读取该数据。