使用foreach循环从页面源中抓取所有类数据 [英] Using foreach loop to scrape all class data from page source

查看:58
本文介绍了使用foreach循环从页面源中抓取所有类数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在这里,我正在使用DOM从网页上抓取数据.我可以抓取一流的数据.我已经考虑了所有 review-wrapper 类.我认为它会迭代,但是每次仅显示相似的结果.

我正在抓取评论,日期和费率值.

示例: http://codepad.viper-7.com/lHS9jk

代码:

 <?phplibxml_use_internal_errors(true);$ html = file_get_contents('http://www.yelp.com/biz/franchino-san-francisco?start=80');$ html = escapeshellarg($ html);$ html = nl2br($ html);$ classname ='评论包装器';$ dom =新的DOMDocument;$ dom-> loadHTML($ html);$ xpath =新的DOMXPath($ dom);$ results = $ xpath-> query("//* [@ class ='".$ classname.']");foreach($ results作为$ node){$ classname ='评分限定词';$ dom =新的DOMDocument;$ dom-> loadHTML($ html);$ xpath =新的DOMXPath($ dom);$ results = $ xpath-> query("//* [@ class ='".$ classname.']");if($ results-> length> 0){echo $ review = $ results-> item(0)-> nodeValue;回声"br/";}$ classname ='review_comment ieSucks';$ dom =新的DOMDocument;$ dom-> loadHTML($ html);$ xpath =新的DOMXPath($ dom);$ results = $ xpath-> query("//* [@ class ='".$ classname.']");if($ results-> length> 0){echo $ review = $ results-> item(0)-> nodeValue;回声"br/";}$ meta = $ dom-> documentElement-> getElementsByTagName("meta");echo $ meta-> item(0)-> getAttribute('content');回声"br/";}?> 

解决方案

您可以通过使用for循环来实现:

 <?phplibxml_use_internal_errors(true);$ html = file_get_contents('http://www.yelp.com/biz/franchino-san-francisco?start=80');$ html = escapeshellarg($ html);$ html = nl2br($ html);for($ x = 0; $ x< = $ results-> length; $ x ++){$ classname ='评分限定词';$ dom =新的DOMDocument;$ dom-> loadHTML($ html);$ xpath =新的DOMXPath($ dom);$ results = $ xpath-> query("//* [@ class ='".$ classname.']");if($ results-> length> 0){echo $ review = $ results-> item($ x)-> nodeValue;回声< br/>";}$ classname ='review_comment ieSucks';$ dom =新的DOMDocument;$ dom-> loadHTML($ html);$ xpath =新的DOMXPath($ dom);$ results = $ xpath-> query("//* [@ class ='".$ classname.']");if($ results-> length> 0){echo $ review = $ results-> item($ x)-> nodeValue;回声< br/>";}$ dom =新的DOMDocument;$ dom-> loadHTML($ html);$ xpath =新的DOMXPath($ dom);$ metas = $ xpath-> query("//meta [@ itemprop ='ratingValue']");;if($ metas-> length> 0){echo $ review = $ metas-> item($ x)-> getAttribute('content');回声< br/>";}}?> 

此处演示: http://codepad.viper-7.com/C6KRW2

Here I am scraping data from web page using DOM. I can scrape the data for first class. I have put for each to consider all review-wrapper class. I think it iterate but every time it shows similar results only.

I am scraping review, date and rate value.

Example : http://codepad.viper-7.com/lHS9jk

code:

<?php

libxml_use_internal_errors(true);
$html= file_get_contents('http://www.yelp.com/biz/franchino-san-francisco?start=80');

$html = escapeshellarg($html) ;
$html = nl2br($html);

$classname = 'review-wrapper';
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$results = $xpath->query("//*[@class='" . $classname . "']");

foreach($results as $node)
{
    $classname = 'rating-qualifier';
    $dom = new DOMDocument;
    $dom->loadHTML($html);
    $xpath = new DOMXPath($dom);
    $results = $xpath->query("//*[@class='" . $classname . "']");
    
    if ($results->length > 0) {
        echo $review = $results->item(0)->nodeValue;
        echo "<br/>";
    }
    
    
    $classname = 'review_comment ieSucks';
    $dom = new DOMDocument;
    $dom->loadHTML($html);
    $xpath = new DOMXPath($dom);
    $results = $xpath->query("//*[@class='" . $classname . "']");
    
    if ($results->length > 0) {
        echo $review = $results->item(0)->nodeValue;
        echo "<br/>";
    }
    
    $meta = $dom->documentElement->getElementsByTagName("meta");
    echo $meta->item(0)->getAttribute('content');
    echo "<br/>";
}
?>

解决方案

you can do this by using the for loop :

  <?php

    libxml_use_internal_errors(true);
    $html= file_get_contents('http://www.yelp.com/biz/franchino-san-francisco?start=80');

    $html = escapeshellarg($html) ;
    $html = nl2br($html);

    for ($x=0; $x<=$results->length; $x++) {
        $classname = 'rating-qualifier';
        $dom = new DOMDocument;
        $dom->loadHTML($html);
        $xpath = new DOMXPath($dom);
        $results = $xpath->query("//*[@class='" . $classname . "']");

        if ($results->length > 0) {
            echo $review = $results->item($x)->nodeValue;
            echo "<br/>";
        }


        $classname = 'review_comment ieSucks';
        $dom = new DOMDocument;
        $dom->loadHTML($html);
        $xpath = new DOMXPath($dom);
        $results = $xpath->query("//*[@class='" . $classname . "']");

        if ($results->length > 0) {
            echo $review = $results->item($x)->nodeValue;
            echo "<br/>";
        }

        $dom = new DOMDocument;
        $dom->loadHTML($html);
        $xpath = new DOMXPath($dom);
        $metas = $xpath->query("//meta[@itemprop='ratingValue']");
        if ($metas->length > 0) {
            echo $review = $metas->item($x)->getAttribute('content');
            echo "<br/>";
        }
    }
    ?>

demo here : http://codepad.viper-7.com/C6KRW2

这篇关于使用foreach循环从页面源中抓取所有类数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆