【问题标题】:Scraping tags that have spaces in class names php [duplicate]抓取类名中包含空格的标签php [重复]
【发布时间】:2018-06-07 08:27:32
【问题描述】:

这里我有一个带有类名的 html div 标签,里面有空格。

<div data-marker="music-track-title" class="music-track__title text--single-line size-e"> No Vanguard Revival (Radio 1 Session, 16 May 2018) </div>

我尝试使用 php curl 和 dom 帮助从这个标签中获取信息,但它什么也没返回。

这是我到目前为止写的代码:(不工作)

<?php 
    include_once 'includes/db.inc.php';
    include_once 'includes/simple_html_dom.php';
    include_once 'includes/curl_init.php';
    $yesterday = date("Y/m/d", strtotime( '-1 days' ) );
    $a=NULL;
    $html=curl_get('https://www.bbc.co.uk/music/tracks/find/radio1/'.$yesterday.'/12AM');
    $dom = new DOMDocument();
    $dom = str_get_html($html);
    $myList=NULL;
    $songs=$dom->find('.music-track__top music-track__top--list');
?>

如何从类名中带有空格的 div 标签中获取信息。使用php curl,Dom。

【问题讨论】:

  • 类名中是否只有一个 div 标签有空格?或者可能还有更多。
  • 我刚刚发布了更多内容以显示示例。
  • 那么需要获取所有类名中有空格的标签吗?
  • 还有更多,但现在我的目标是从中获取信息。
  • 如果您使用的是 simplehtmldom,则不需要 $dom = new DOMDocument(); 这一行。

标签: php curl dom web-scraping


【解决方案1】:

你应该试试这个:

$finder = new DomXPath($dom);
$classname="music-track__title";
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");
$node = null;
foreach ($nodes as $element) {
    if ($element->getAttribute('class') == "music-track__title text--single-line size-e") {
        $node = $element;
        break;
    }
}

变量$elements 将包含在类名中有空格的标签列表。

【讨论】:

  • 我不认为我们的目的是在 class 属性中找到带有空格的标签,他们只是想找到一个实际上有 2 个特定类的标签。
  • 是的,奈杰尔的评论是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-18
  • 2017-04-12
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多