2015-12-24 15 views
7

Zur Zeit vorgelegt wird ich simple_html_dom bin mit einer Website view here kratzen die Website zu sehen, ich bin Schaben, kommt alles wieder in Ordnung, außer es den gleichen Inhalt für jeden einzelnen Posten setzen geht es kratzt .. View here to see demoAusgabe mehrfach

$page = (isset($_GET['p'])&&$_GET['p']!=0) ? (int) $_GET['p'] : ''; 
$html = file_get_html('http://screenrant.com/movie-news/'.$page); 

foreach($html->find('#site-top > div.site-wrapper > div.top-content > article > section > ul > li > div.info > h2 > a') as $element) 
{ 
    print '<br><br>'; 
    echo $url = ''.$element->href; 
    $html2 = file_get_html($url); 

    $image = $html2->find('meta[property=og:image]',0); 
    $news['image'] = $image->content; 
    #print '<br><br>'; 

    // Ending The Featured Image 

    #site-top > div.site-wrapper > div.top-content > article > section > ul > li:nth-child(2) 

    $title = $html2->find('#site-top > div.site-wrapper > div.top-content > article > header.single-header > h1',0); 
    $news['title'] = $title->plaintext; 

    // Ending the titles 
    print '<br>'; 
    #site-top > div.site-wrapper > div.top-content > article > div 
    $articles = $html2->find('#site-top > div.site-wrapper > div.top-content > article > div > p'); 
    foreach ($articles as $article) { 
    #echo "$article->plaintext<p>"; 
    $news['content'] = $news['content'] . $article->plaintext . "<p>"; 
    } 

    print '<pre>';print_r($news);print '</pre>'; 

    print '<br><br>'; 

     // mysqli_query($DB,"INSERT INTO `wp_scraped_news` SET 
      //     `hash` = '".$news['title']."', 
       //     `title` = '".$news['title']."', 
       //    `image` = '".$news['image']."', 
        //    `content` = '".$news['content']."'"); 
     // print '<pre>';print_r($news);print '</pre>'; 
} 

Ich habe keine Ahnung, wo ich hier falsch liege, aber ich nehme an, es ist eines von zwei Dingen, und ich habe mit diesen beiden Dingen herumgespielt, ohne Glück.

1. Ich mache etwas falsch mit, wie meine foreach ausgelegt sind.

2. Die Website ändert Selektoren für jeden neuen Artikel.

In beiden Fällen bin ich wahrscheinlich falsch .. aber ich habe mit ihnen beide für etwa 2 Stunden jetzt und an dem Punkt des Aufgebens gebastelt .. jede Hilfe wird sehr geschätzt.

+0

Ich denke, Ihre Auswahl Weg falsch sein kann. Wählen Sie in Chrome das gewünschte HTML-Element aus, klicken Sie mit der rechten Maustaste, und klicken Sie anschließend auf Kopieren> Auswahl kopieren. Ich bekomme etwas, das so aussieht: '# site-top> div.site-wrapper> div.top-content> artikel> abschnitt> ul> li: nth-kind (2)> div.info> div> div> p '- wahrscheinlich muss dieses' li: nth-child (2) 'zu diesem' li' geändert werden ... ein Platz zum Starten. – Clay

+3

@Clayton wenn man sich den angezeigten Code anschaut, habe ich das auskommentiert, weil ich es schon ausprobiert habe .. - Einfach den Code wieder einfügen, und es werden nur die auf der ** News ** -Archivseite angezeigten Snippets zurückgegeben Wir deklarieren die URL oben, was bedeutet, dass wir auch die Inhaltsseiten scrappen können. – Placeholder

Antwort

4

Das Problem ist, dass Sie nicht den alten Inhalt von löschen. Wenn Sie also die zweite Seite bearbeiten, fügen Sie ihren Inhalt dem Inhalt der ersten Seite hinzu. Und die dritte Seite hängt daran an, und so weiter.

Put

$news['content'] = ''; 

vor

foreach ($articles as $article) { 
+0

Jetzt bin ich darüber hinaus verwirrt ..? Wenn ich dies tue, gibt es nur einen Fehler zurück. – Placeholder

+0

Schauen Sie sich Ihre Ausgabe genauer an. Es zeigt nicht den gleichen Inhalt für jeden Beitrag. Der Anfang ist der gleiche, aber es wird jedes Mal länger. – Barmar

+0

Ich bin mir sicher, dass ich das falsch mache .. kannst du bitte deinen Beitrag editieren um genau zu zeigen wie ich es haben soll? Weil '$ article ['content'] = '';' über meiner 'foreach ($ articles as $ article) {' gibt nur einen Fehler in Zeile 43 zurück. – Placeholder