组织使用动态scape数据填充多维数组 - PHP

时间:2017-02-19 23:31:54

标签: php arrays curl multidimensional-array web-scraping

简介
我试图抓住一个特定的网站,因为它的头条新闻和链接相关联。然后刮取文章文本的链接页面。我正在使用cURL和simple_html_dom.php

问题
我正在尝试安排所有这些数据;标题,链接和文章文本,在具有以下结构的多维数组中:

Array
(
    [0] => Array
        (
            [0] => title 1
            [1] => link 1
            [2] => text 1
        )       
    [1] => Array
        (
            [0] => title 2
            [1] => link 2
            [2] => text 2
        )   
)

但无论我如何努力实现这一目标,结构都是完全错误和错误的。如何使用链接和标题保存相应的文本?

代码

<?php
$results_page = curl($url); // Downloading the results page using curl() funtion
$html = new simple_html_dom();
$html->load($results_page);
$items = $html->find('h2[class=artTitle]');  // Exploding each h2
foreach($items as $post) {
    $headlines[] = array($post->children(0)->innertext); // Saving h2 text
    $url_results[] = ($post->children(0)->href); // Saving h2 link
}
foreach($url_results as $url_result) { 
    $results_page = curl($url_result);
    $html->load($results_page);
    foreach($html->find('#articleText p[!class]') as $post) // Finding all p elements inside container
        $articles[] = array($post->plaintext); // Adding p elements to array
}
?>

我已经排除了我的cURL功能,因为我不认为它是这个问题的一个因素,并且不想混淆这个问题。如果需要,我当然会添加它。

以下是我目前的数组结构:

$标题的当前数组结构:

Array
(
    [0] => Array
        (
            [0] => Headline 1¨
        )
    [1] => Array
        (
            [0] => Headline 2¨
        )
)

$ url_results的当前数组结构:

Array
(
    [0] => Link 1
    [1] => Link 2
)
Array

$ articles的当前数组结构:

Array
(
    [0] => Array
        (
            [0] => Paragraph 1 Text 1
        )

    [1] => Array
        (
            [0] => Paragraph 2 Text 1
        )

    [2] => Array
        (
            [0] => Paragraph 1 Text 2
        )
)

1 个答案:

答案 0 :(得分:0)

如何在第一个foreach循环中声明索引并使用它来确定子数组的位置。这样,您可以嵌套后续的foreach循环并继续进行数组构建。

foreach($items as $index=>$post) {
    $desired_array[$index][0]=$post->children(0)->innertext; // Saving h2 text
    $url_results=$post->children(0)->href; // Saving h2 link
    foreach($url_results as $url_result) { 
        $results_page=curl($url_result);
        $html->load($results_page);
        foreach($html->find('#articleText p[!class]') as $post) // Finding all p elements inside container
            $desired_array[$index][1]=""; //I don't know where $link comes from
            $desired_array[$index][2]=array($post->plaintext);
        }
    }
}

我无法对此进行测试,因为我没有要使用的示例$items