用js刮HTML

时间:2016-04-05 19:52:36

标签: javascript php jquery html ajax

我试图获取www.soccerway.com的html。特别是:

enter image description here

label-wrapper课程我也尝试过:select.nav-select但我无法获得任何内容。我做的是:

1)创建了一个名为grabber.php的php文件,此文件包含以下代码:

<?php echo file_get_contents($_GET['url']); ?>

2)使用以下内容创建了index.html文件:

<!DOCTYPE html>
<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
    <meta charset=utf-8 />
    <title>test</title>
</head>
<body>

<div id="response"></div>

</body>

<script>
    $(function(){
        var contentURI= 'http://soccerway.com';    
        $('#response').load('grabber.php?url='+ encodeURIComponent(contentURI) + ' #label-wrapper');
    });
    var LI = document.querySelectorAll(".list li");
    var result = {};

    for(var i=0; i<LI.length; i++){
        var el = LI[i];
        var elData = el.dataset.value;
        if(elData) result[el.innerHTML] = elData; // Only if element has data-value attr
    }

    console.log( result );
</script>

</html>
在div中没有​​抓取任何内容,我测试了我的js代码以获取所有链接并正常工作但我已经插入了html页面manually

1 个答案:

答案 0 :(得分:2)

我在这里看到了几个问题。

var contentURI= 'http:/soccerway.com #label-wrapper';

您错过了http://中的第二个斜杠,并且您将带有空格和ID的网址传递给file_get_contents。你会想要这个:

var contentURI = 'http://soccerway.com/';

然后您需要从生成的HTML中解析您感兴趣的项目。

#label-wrapper需要在jQuery load()调用中,而不是file_get_contents,并且需要使用encodeURIComponent正确转义contentURI变量:

$('#response').load('grabber.php?url='+ encodeURIComponent(contentURI) + ' #label-wrapper');

您的代码还包含一个可能非常危险的大量漏洞,因为它允许任何人以grabber.phpurl访问router.c服务器上的文件位置。这可能会损害您的数据库密码或服务器上的其他敏感数据。