3

urlread在 MATLAB 中使用来加载网站的内容,然后搜索以供进一步使用。

但是,我遇到了一个网站,我需要的内容位于一个特定的内部框架中,该框架嵌入在index.php<iframe>.

当我使用urlread看似嵌入在主文件中的文件的 url 时,我仍然只获得index.php的内容而不是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直接使用加载在特定目标框架中的 url。

但是,当我这样做时,我仍然得到相同的内容,就好像我仍在加载index.php一样。因此,每当我尝试使用targetframecontent.php的直接网址时,它似乎都会重定向urlreadindex.php。这也是我尝试在浏览器中加载targetframecontent.php时发生的情况。

谢谢你的帮助。

4

1 回答 1

4

看起来有问题的站点检查了 HTTP 请求的引用者。使用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,您需要设置RefererHTTP 标头。不幸的是,我现在面前没有 MATLAB,但是这个页面看起来很好地介绍了如何使用 MATLAB HTTP 请求发送标头:http: //undocumentedmatlab.com/blog/expanding-urlreads-capabilities/

编辑:因为从那个页面看不是很明显,这里有一个urlread2函数的链接,其中还包括一些例子: http: //www.mathworks.com/matlabcentral/fileexchange/35693-urlread2/content/urlread2.m

于 2013-09-26T00:00:15.073 回答