我在MATLAB中使用urlread
加载网站内容,然后搜索以供进一步使用。
但是,我遇到了一个网站,我需要的内容位于特定的内部框架中,该框架嵌入 index.php 到<iframe>
。
当我将urlread
与看似嵌入主文件的文件的url一起使用时,我仍然只获取 index.php 的内容而不是< EM> targetframecontent.php
我猜urlread
可能不是正确的工具,或者我可能会忽略其他让我尝试失败的事情。
有没有办法将这样的内部框架的内容放入MATLAB?
编辑:更准确一点:
我通常会使用以下内容将网站内容读入我的MATLAB工作区:
data = urlread('http://[...]index.php')
但是这样做我只获得父 index.php 的内容,而不是嵌入式 targetframecontent.php 的内容。我在浏览网站源代码时想到了这一点,其中包含我感兴趣的内容的网站部分被加载到一个框架中:
<iframe src="http://[...]targetframecontent.php" width="850px" height="1000px" border="0" frameborder="0"></iframe>
因此我试图直接使用urlread
加载到特定目标框架中的网址。
然而,当我这样做时,我仍然得到了相同的内容,好像我还在加载 index.php 。
因此,每当我尝试使用 targetframecontent.php 的直接网址时,它似乎会将urlread
重定向回 index.php 。当我尝试在浏览器中加载 targetframecontent.php 时,也会发生这种情况。
感谢您的帮助。
答案 0 :(得分:4)
看起来site in question检查HTTP请求的Referrer。使用wget
,如果您通过了--referer
选项,则可以下载<iframe>
:
$ wget --referer="http://www.sf.tv/sfmeteo/lokalprognosen/index.php?q=Gen%C3%A8ve" -O test_ref "http://www.sf.tv/sfmeteo/lokalprognosen/detailprognose.php?id=&q=Gen%C3%A8ve&max=&drs=0&kiosk=&js=&deeplink=&f="
$ cat test_ref
[...]
<body class="sf">
<!-- referrer:http://www.sf.tv/sfmeteo/lokal -->
<script type="text/javascript"> <!--
var keineprognose = '0';
// -->
</script>
<p class="inv">
<a href="#anker_cm">zum Inhalt</a><br />
</p>
但是,如果您wget
没有发送推荐人,则会获得:
wget -O test_noref "http://www.sf.tv/sfmeteo/lokalprognosen/detailprognose.php?id=&q=Gen%C3%A8ve&max=&drs=0&kiosk=&js=&deeplink=&f="
<body class="sf" role="application">
<p class="inv">
<a href="#anker_cm">zum Inhalt</a><br />
</p>
<!--googleoff: all--> <div id="HEADWRAP" class="sf-header">
<div class="INNERWRAP">
<h1 class="inv">SF Schweizer Fernsehen - Navigation</h1>
这是原始的父页面。
因此,要将其纳入MATLAB,您需要设置Referer
HTTP标头。不幸的是,我现在没有MATLAB在我面前,但是这个页面看起来很好地介绍了如何使用MATLAB HTTP请求发送标头:http://undocumentedmatlab.com/blog/expanding-urlreads-capabilities/
编辑:因为该页面不是非常明显,所以这里是urlread2
函数的链接,其中还包含一些示例:http://www.mathworks.com/matlabcentral/fileexchange/35693-urlread2/content/urlread2.m