【问题标题】:Read div value from webpage从网页读取 div 值
【发布时间】:2013-04-13 17:43:55
【问题描述】:

我还没有真正找到任何关于此的信息。我想从网站读取数据。从我的网页中,我可以使用

读取 div 的值
<div class="tools">hammer</div>

var divs = document.getElementsByTagName("div");
    for(var i=0; i<divs.length; i++ ) {
        if(divs[i].className == "tools") {
            alert(divs[i].innerHTML);
        }
    }

是否可以设置所需网页的 URL,以便此代码抓取该页面?我知道类名和网址。

根据@cereallarceny 的回答,我创建了这个代码块,但在运行脚本时没有看到任何警报:

$.ajax({
type: 'get',
url: 'https://play.google.com/store/apps/details?id=com.viber.voip',
crossDomain: true, //Very important, ensures you can get data from a domain that isn't your own!
success: function() {
  var divs = document.getElementsByTagName("div");
    for(var i=0; i<divs.length; i++ ) {
        if(divs[i].className == "votes") {
            alert(divs[i].innerHTML);
        }
    }
}
});

【问题讨论】:

  • 您可以使用getElementsByClassName 而不是getElementsByTagName 来获取所有带有class="tools" 的元素。
  • 一定要用javascript吗?你可以使用 bash 脚本,或者 java 与 HttpSocket
  • @Pietu1998 AFAIK getElementsByClassName 并非所有浏览器都支持,或者有时会出现问题
  • @MitchBukaner 我知道 js 和 php。你有什么想法?
  • 就是去其他网站找东西吧?

标签: javascript


【解决方案1】:

如果您使用像 jQuery 这样的库,那么您可以简单地使用 load() 函数来获取网页的代码(或者如果您将 #myDiv 附加到 URL,则可以获取网页的一部分)。如果你把它放在一个变量中,你就可以处理这些信息。如果您只是使用 Javascript,那么您需要考虑发出 AJAX 请求(这是 load() 所做的)。您可以找到有关如何执行此操作的更多信息located here

有关load() 函数的更多信息,read jQuery's documentation

请记住,jQuery 的 load() 函数用于将 HTML 加载到元素中。如果您想读取和操作该数据,那么您可能应该使用ajax() function。这样,您可以执行以下操作:

$.ajax({
    type: 'get',
    url: 'http://www.google.com',
    crossDomain: true, //Very important, ensures you can get data from a domain that isn't your own!
    success: function(data) {
        $('#myDiv').html(data);

        //Now I can handle all the HTML from my URL from a <div> tag called #myDiv, the following will alert out the body of http://www.google.com
        alert($('#myDiv').find('body'));
    }
});

这实际上将向指定的 URL 发出 GET 请求,同时注意它与请求的来源(您的服务器)的域名不同,然后在函数中处理成功在变量 data 中返回的 HTML。您可以随意使用数据,因为它现在是您的变量,包括按您喜欢的方式解析该信息。

【讨论】:

  • No @jgillich ... 那是 jQuery 中的加载 event 。我说的是加载功能。 api.jquery.com/load
  • 这看起来不错。我应该将代码放入函数中吗?我的意思是`成功:函数(数据){我的整个js代码}`
  • 嗯这个答案可能比我的好
  • 你可以把代码放在那里,但我怀疑它在没有一些 jimmyrigging 的情况下可以工作。 :) 我的代码使用 jQuery (jquery.com),如果您要使用任何 jQuery,那么您的代码也可以是 jQuery,但事实并非如此。这样你就可以在你的代码中坚持一致性。
  • 我刚刚将该代码块添加到我的问题中。我在代码中有 jquery else ,因此在文件中导入了必要的 jquery 版本。我还需要什么?
【解决方案2】:
$file=fopen($URL,'r'); 
    if ($file) 
    { 
    $string =""; 
    while (!feof($file)){ 
            $string .=fgets($file,512); 
    } 
echo $string; 
}else echo "error";

这与网络相呼应。但你可以用它做任何事情。

好的。这是一个如何在js中请求一个网站

var xmlhttp;

if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }


   xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    return xmlhttp.responseText;
    }
  }


var answerFromURL=xmlhttp.onreadystatechange();


    xmlhttp.open("GET","urlToParse.php",true);
    xmlhttp.send();

【讨论】:

  • 这甚至不是 JavaScript。
  • 它是 php。他说他知道
  • 我知道它是 php,但这个问题专门要求 JavaScript 解决方案。 (标签...)
  • 您必须查找带有该标签的子字符串,然后是结束标签,然后保存内容。
猜你喜欢
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多