使用PHP从网站获取某些信息的最佳方式

时间:2018-03-28 01:36:48

标签: php regex curl

我想获得某个网站的某些信息。我面临的问题是,某些信息每天可能会改变几次。这是因为内容是动态的。

我的PHP脚本的目标是在PHP变量中获取内容(来自数据库的动态内容)。

我已经设置了一个codepen来向你展示我的意思:https://codepen.io/anon/pen/XEVpBo
来自codepen的HTML:

<div class="wrapper">
  <div class="some_useless_div">
    <p>Some useless text paragraph.</p>
    <div id="another_useless_div">
      <p>The actual important part is: SOME_DYNAMIC_TEXT what I want to put into a variable. The text around that dynamic text is static text and will not change.</p>
    </div>
  </div>
</div>

目前,我所做的捕获信息的方法是围绕动态信息展开:

$content = file_get_contents('https://codepen.io/anon/pen/XEVpBo');
$parts = explode('The actual important part is: ', $content); // some text that is left of the information.
$parts2 = explode(' what I want to put into a variable.', $parts[1]); // some text that is right of the information.
$information = $parts2[0]; // AHA! Now we have the information!

然而,这真的感觉像意大利面条代码。是否存在可能搜索字符串并返回该值的函数,例如:
$information = search_string('The actual important part is: %s what I want to put into a variable.');其中%s是放入$ information变量的信息。

同样,我使用的代码(上面)有效,但它真的感觉像坏代码。我正在寻找一个干净的PHP函数。

1 个答案:

答案 0 :(得分:1)

也许您正在寻找preg_match

测试代码似乎工作正常:https://3v4l.org/6YeSh

<?php
$html=<<<'HTML'
<div class="wrapper">
  <div class="some_useless_div">
    <p>Some useless text paragraph.</p>
    <div id="another_useless_div">
      <p>The actual important part is: SOME_DYNAMIC_TEXT what I want to put into a variable. The text around that dynamic text is static text and will not change.</p>
    </div>
  </div>
</div>
HTML;
preg_match('/The actual important part is\: (.*?) what I want to put into a variable\./',$html,$matches);
$str=$matches[1];
var_dump($str);

另外,当你谈论“最好”的方式时,它绝对不是file_get_contents,至少有两个原因:

file_get_contents继续读取,直到目标服务器关闭套接字,但是一旦读取了content-length字节就应该停止读取,这取决于服务器,可能执行得更快

file_get_contents不支持压缩传输。

curl读取直到读取内容长度字节,然后返回,它还支持压缩传输,因此curl应该比file_get_contents快得多。

(我不同意,你的代码不是意大利面代码。我不认为它是好的代码,因为你应该使用preg_match而不是explode(),它可能更快,使用更少的内存,更容易编写和维护比爆炸代码,但你的爆炸代码不是意大利面条。)