我正在构建一个从各个站点获取html源代码的应用程序。 使用xpath或简单的html dom,我可以很容易地解析这个html并将它变成数据库等。
不幸的是,这种方法不适用于某个特定网站。 这是因为网站使用JavaScript加载其内容,因此其大部分内容在html源中不可见。
一遍又一遍地搜索,并在Stackoverflow上读取覆盖主题的大量线程。我仍然不确定如何解决这个问题。
以下是此网站用于显示其内容的代码的重要部分。
<script type="text/javascript" src="/jquery-1.3.2.min.js"></script>
<script>
var example = {
getServiceCall:function(url) {
{
var srtPos=url.indexOf('Filter');
var endPos=url.indexOf('/',srtPos);
var filter = $.getUrlVar("Filter");
var filterInServiceUrl=url.slice(srtPos,endPos).split(":");
url = (filter)
? url.slice(0,srtPos) + filter + url.slice(endPos,url.length)
: url.slice(0,srtPos) + filterInServiceUrl[1] + url.slice(endPos,url.length);
}
document.writeln('<scri'+'pt src="'+url+'" type="text/javascript"> </sc' + 'ript>');
},
};
$.extend({
getUrlVars: function(){
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
},
getUrlVar: function(name){
}
});
</script>
<div id="content">
<script language="javascript" type="text/javascript">
function doPerItem(html){ $("#content").html(html.toString()); }
example.getServiceCall('http://www.example.com/?callback=doPerItem');
</script>
</div>
在Google Chrome中使用Inspect Element我可以看到有一个文件包含我想要的html源代码。
如何使用php为远程服务器发出相同的请求/参数,然后将响应保存到文件中?
然后,我将使用xpath或简单的html dom解析它,就像其他网站一样。
非常感谢您的帮助。
答案 0 :(得分:0)
我不知道任何解释JavaScript的基于PHP的远程访问工具(包括cURL)。 Selenium(通常用于测试)可能会这样做,但Selenium-RC根本不适用于PHP,并且在IDE中存在错误。
你实际上不能使用Ajax,因为它也不能解析JavaScript(也许你可以用eval()
以某种方式解决它有安全问题),而JSONP只有在远程服务器故意提供API时才能工作获取数据(您可以编写自己的代理,然后将数据作为JSONP提供,但是您仍然有解决JavaScript的问题)。
您可以为您的网站做什么(虽然它有真正的安全风险):
不幸的是,您无法避免步骤1,因为除非来自与您相同的域,否则您无法收听iframe。
请注意,如果您访问的网站以某种方式制作他们的JavaScript,他们可以访问您的包含HTML,并执行诸如获取用户的Cookie以窃取密码,查找您的域或页面上显示的内容等操作等等。
可能有更好的解决方案,但我不知道。