【问题标题】:Getting data from an external webpage从外部网页获取数据
【发布时间】:2011-12-21 17:41:26
【问题描述】:

通过 php 从外部网站获取内容的最佳方式是什么?

我如何使用 php 访问网页(例如:http://store.domain.com/1/)并扫描 HTML 编码以查找介于两者之间的数据(即字母 C 和 E)。我使用什么 php 方法?

<span id="ctl00_ContentPlaceHolder1_phstats1_pname">C</span>
<span id="ctl00_ContentPlaceHolder1_phstats2_pname">E</span>

然后将“C”(找到的字符串)保存到 $pname

$_session['pname1'] = $pname1;
$_session['pname2'] = $pname2;

【问题讨论】:

标签: php


【解决方案1】:

可以通过 CURL 来完成。但是您可以只在项目中包含 Simple HTML DOM Parser。它非常易于使用,将为您服务。

文档在这里。 http://simplehtmldom.sourceforge.net/

【讨论】:

    【解决方案2】:

    最有效的方法是:

    $content = file_get_contents('http://www.domain.com/whatever.html');
    
    $pos = str_pos($content,'id="c');
    $on=0;
    while($pos!==false)
     {
     $content = substr($content,$pos+4);
     $pos = str_pos($content,'"');
     $list[$on] = substr($content,0,$pos);
     $on++;
     $pos = str_pos($content,'id="c');
     }
    

    那么你所有的值都会在 $list 数组中,其中的计数是 $on。

    您也可以使用其中一个 preg 函数在一行中完成,但我喜欢老式的方法,它快一纳秒。

    【讨论】:

    • 应该是 $pos = str_pos($content,''); ?最好的方法是单独做而不是将所有内容分组到列表数组中
    • 不,应该保持原样,否则只会得到1个结果。
    • 最好将它们放入一个数组中,然后使用 for($run=0; $run
    【解决方案3】:

    您需要使用网页抓取技术。只需使用HTML DOM LibraryNode.jsjQuery 等技术即可完成。你可以找到一些关于这个herehere.的有用教程

    您还可以看到这个thread 关于使用PHP 实现抓取

    【讨论】:

      【解决方案4】:

      我认为您实际上可以使用file_get_contents("http://store.domain.com/1/"); 来执行 http 请求。

      至于解析它,取决于你的项目有多大以及你愿意付出多少努力,你可以在这里找到一个 html DOM 解析器 http://simplehtmldom.sourceforge.net/ 或简单地搜索 id="ctl00_ContentPlaceHolder1_phstats1_pname" 并将其拆开一块一块的(不是推荐的做事方式)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多