首页 > 解决方案 > 如何在 laravel 中使用 symfony/dom-crawler 从 HTML 块中选择多个值

问题描述

我想使用 symfony dom-crawler 从页面爬取数据我想要什么数据我可以将它们全部显示在一个数组中,但我需要将它们存储在数据库中。这是页面的html代码

这是我的控制器代码 这是我的输出。在主页面里面你可以看到值 18、4 和 35、3 我需要这些值来将它们存储在数据库中,所以我该怎么做呢??。` public function numbers() { $url = " https://www. lotteryinformation.us/apps/freq-chart.php?state=FL&game=MUPB&tb_state=&tb_links=&tb_country=US&tb_lang=0&adsurl=&tbsite=&d= ."; $client = 新客户();$crawler = $client->request('GET', $url);

    $tr_elements = $crawler->filterXPath('//body/center/table/tr/td');
    // iterate over filter results
    foreach ($tr_elements as  $content)
    {
        $tds = array();
        // create crawler instance for result
        $crawler = new Crawler($content);

        foreach ($crawler->filter('tr[valign="middle"]') as  $node) {
            $crawler = new Crawler($node);
            foreach ($crawler->filter('td[class="td0"]') as  $node)
            {
                // extract the value
                 $tds[] = $node->nodeValue;
                //my code
            }
            foreach ($crawler->filter('td[class="td0"]')->eq(2) as  $node)
            {
                // extract the value
                $tds[] = $node->nodeValue;
                //my code
            }

        }
        dd($tds);
        $rows[] = $tds;

    }

   dd($rows);
}`

标签: phplaravel

解决方案


Well i have solved the problem by doing the code this way ` public function numbers()
{
    $url = "https://www.lotteryinformation.us/apps/freq-chart.php?state=FL&game=MUPB&tb_state=&tb_links=&tb_country=US&tb_lang=0&adsurl=&tbsite=&d=.";

    $client = new Client();


    $crawler = $client->request('GET', $url);

    $tr_elements = $crawler->filterXPath('//body/center/table/tr/td');
    // iterate over filter results
    foreach ($tr_elements as  $content)
    {
        $tds = array();

        // create crawler instance for result
        $crawler = new Crawler($content);
        //iterate again
        /*$links_count =$crawler->filter('tr[valign="middle"]')->count();
        return $links_count;*/
        foreach ($crawler->filter('tr[valign="middle"]') as  $node) {
            $crawler = new Crawler($node);
            foreach ($crawler->filter('td[class="td0"]')->eq(0) as  $node)
            {
                $rank = $crawler->filter('td[class="td0"]')->eq(1)->text();
                $tds[] = $rank;
                $hit = $crawler->filter('td[class="td0"]')->eq(2)->text();
                $tds[] = $hit;

                $frequency_table = new FrequencyTable;
                $frequency_table->rank = $rank;
                $frequency_table->hit= $hit;
                $frequency_table->save();

              /* $tds[] = $node->nodeValue;*/
            }
        }
        dd($tds);
    }

}` and it is what exactly i wanted. Thank you.

推荐阅读