如何通过PHP从远程网页获取td元素内的文本

时间:2018-07-23 16:49:26

标签: php html ajax cross-domain

我已经设置了温度监控器,并且我想将某些数据用于其他用途(定时作业等)。可以从我们的本地网络(192.168.123.123)访问来自传感器的数据。有问题的元素是:

<td id="1E5410ECC9D90FC3-entity-0-measurement-0" class="">69.08</td>
<!-- I NEED THE 69.08 -->

由于出现了Allow-Access-Origin错误(CORS),所以无法通过Ajax完成此操作。

我尝试过:

$url = 'http://192.168.123.123';
$content = file_get_contents($url);
$first = explode( '<div id="1E5410ECC9D90FC3-entity-0-measurement-0">' , $content );
$second = explode("</div>" , $first[0] );

echo $second[0];

但是我明白了:

��UMS�0��+��$���94С�2����؋-�%#Ʉ�뻲���Bۓ%����ݷr��m4�yyF*_+ry���ӈP������S��|��&�ȵ�2���}��V�7ǜO��dz�[�� (�!�_2��$�/�p/ g�=B� D����<��1�#�=h���J�˨�'��I^ ��g7��=�=��^�0��ϔ����p�Q��L��I�%TF�Q�)    ������;c��o$��a����g��mWr�ܹ��;�(��bE��O�i� ��y�҉)f=�6=�,2� �#I��s����>����kNƕt/W2^��@ Xp�3^݅$ѵ��T U�ʲ�@f��db�ԁ%��b�`G|��D�{sι1�� ]#2ZH�(1;&�h8��^0er��3���D�Q�5B�u� ^!5X:�{a U\:߰0�~Ɍ�3+S�^1��qB:�g����C>�.�P~n��$\֢D����%J+�b�ELc�Gq���K �]��xV��j�[���Ԧ��nAɍ��<�ZT@���zc�Q(f܁�(~�^�ZKwk:8�·n>��(=�"aB)�Fl5�b]/�_�$���_��ɴ��9�H}��B    [#�V�ԅp��r�g�A�j���2����Ju*������{�bY�,O4�����M��B�#�e���,�   ��_֔���o����

如何在特定的div ID中正确获取“ td”文本?

2 个答案:

答案 0 :(得分:0)

您正尝试从<td id="1E5410ECC9D90FC3-entity-0-measurement-0" class="">而不是<div id="1E5410ECC9D90FC3-entity-0-measurement-0">检索数据,而不是从<div>检索数据,因此只需将其更改为:

$url = 'http://192.168.123.123';
$content = file_get_contents($url);
$first = explode( '<td id="1E5410ECC9D90FC3-entity-0-measurement-0">' , $content );
$second = explode("</td>" , $first[0] );

echo $second[0];

还是我疯了?

答案 1 :(得分:0)

步骤1:

我建议使用php的curl库来管理和配置Web请求/响应。 使用此机制,可以更好地管理/控制编码,压缩和加密。

http://php.net/manual/en/book.curl.php

// create curl resource
$ch = curl_init();

// set url
curl_setopt($ch, CURLOPT_URL, "http://192.168.123.123");        

//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// $output contains the output string
$output = curl_exec($ch);

// close curl resource to free up system resources
curl_close($ch);

第2步:

让我们从Web服务器返回的响应字符串中提取详细信息。我建议使用PHP的PCRE函数preg_match来提取所需的数据。

http://php.net/manual/en/ref.pcre.php

// Looking for <td id="1E5410ECC9D90FC3-entity-0-measurement-0" class="">69.08</td>
$pattern = '/id="1E5410ECC9D90FC3-entity-0-measurement-0".*>([\d]{1,2}?\.[\d]{1,2})<\//';

// run the regex match and collect the hit
preg_match($pattern, $output, $matches);

// print_r of the array
/*
Array
(
    [0] => id="1E5410ECC9D90FC3-entity-0-measurement-0" class="">69.08</
    [1] => 69.08
)
*/

// Print out the result to check
echo $matches[1];