【问题标题】:Get data from URL based on the data inside span根据 span 内的数据从 URL 获取数据
【发布时间】:2018-10-03 22:30:18
【问题描述】:

我正在尝试从 URL 获取数据,并且仅从具有 title="" 的范围内检索数据 每个“行”数据都有一个跨度,标题的增量值不同,例如

title="1", title="2"

所以我想要获取的数据将在这个范围内 数据在这里 x 将是一个递增的数字

我可以使用此代码从页面中获取所有数据,但是我被困在如何实现我需要的东西上

function file_get_contents_curl($url)
{
$ch = curl_init();

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

$data = curl_exec($ch);
curl_close($ch);

return $data;
}
$html = file_get_contents_curl("http://www.example.com");
//parsing all content:
$doc = new DOMDocument();
@$doc->loadHTML($html);
echo "$html";

数据格式如下:

<span id="RANDOMINFO">
 <a href="/DEMO/RANDOMDATA">+</a>
 <span title="1">DATA I WANT HERE</span> 
<a href="https://URL.COM/RANDOM">CLICK</a> 
<a href="https://URL.COM/RANDOM">RANDOM DATA</a>
</span>
<span id="RANDOMINFO">
 <a href="/DEMO/RANDOMDATA">+</a>
 <span title="2">DATA I WANT HERE</span> 
<a href="https://URL.COM/RANDOM">CLICK</a> 
<a href="https://URL.COM/RANDOM">RANDOM DATA</a>
</span>

【问题讨论】:

  • 请添加来自 url 的响应。您应该能够使用 domdoc 或 xpath 获得所需的内容。
  • 已添加响应
  • 是的,我看到了,但我仍然完全困惑并且不明智

标签: php curl


【解决方案1】:

解决方案: 解释在提供的代码中以 cmets 的形式提供

$doc = new DOMDocument();
@$doc->loadHTML($html);

foreach($doc->getElementsByTagName('span') as $element ) { //Loops through all available span elements
    if (empty($element->attributes->getNamedItem('id')->value) || $element->attributes->getNamedItem('id')->value != 'RANDOMINFO') { // Discards irrelevant span elements based on their `ID`. A similar sorting is achieved with `empty()` as the target `span` doesn't have any associated `ID`.
        echo get_inner_html($element).PHP_EOL; 
    }
}


function get_inner_html( $node ) {
    $innerHTML= '';
    $children = $node->childNodes;

    foreach ($children as $child) {
        $innerHTML .= $child->ownerDocument->saveHTML( $child ); //fetches the text inside child elements of the targeted element
    }

    return $innerHTML;
}

输出:

DATA I WANT HERE
DATA I WANT HERE

参考资料:

  1. DOMDocument::getElementsByTagName
  2. DOMNamedNodeMap::getNamedItem
  3. DOMDocument::saveHTML

【讨论】:

  • 现在什么都没有返回 .. 没有从页面获取数据
  • 我使用您的示例 html 对此进行了测试,尝试根据实际 html 对其进行修改,然后告诉我
  • 结帐my test code
  • ok 可以再次看到数据啊对不起我的错误..它是我在第一个跨度中需要的 id 值
  • 您可以使用$element-&gt;attributes-&gt;getNamedItem('id')-&gt;value 获得ID 值,其中$element 是迭代$doc-&gt;getElementsByTagName('span')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-28
相关资源
最近更新 更多