2015-12-24 18 views
7

वर्तमान में मैं simple_html_dom उपयोग कर रहा हूँ एक वेबसाइट view here स्क्रैप करने का वेबसाइट मैं scraping कर रहा हूँ देखने के लिए प्रस्तुत किया जा रहा है, सब कुछ वापस ठीक छोड़कर यह हर एक के बाद यह scrapes के लिए एक ही सामग्री डाल करने के लिए जारी आता है .. View here to see demoआउटपुट कई बार

$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>'; 
} 

मुझे नहीं पता कि मैं यहां गलत कहां जा रहा हूं लेकिन मुझे लगता है कि यह दो चीजों में से एक है और मैंने इन दोनों चीजों के साथ कोई भाग्य नहीं किया है।

1. मैं कुछ गलत कर रहा हूं कि मेरे foreach कैसे रखे गए हैं।

2. वेबसाइट प्रत्येक नए आलेख के लिए चयनकर्ता बदल रही है।

दोनों मामलों में मैं शायद गलत हूं .. लेकिन मैंने अब लगभग 2 घंटे और छोड़ने के बिंदु पर दोनों के साथ tinkered किया है .. किसी भी मदद की बहुत सराहना की है।

+0

इससे पहले कि मैं अपने चयन पथ गलत हो सकता है लगता है। क्रोम में, इच्छित HTML तत्व का चयन करें, राइट-क्लिक करें, फिर कॉपी> कॉपी चयनकर्ता पर क्लिक करें। मुझे ऐसा कुछ मिलता है जो इस तरह दिखता है: '# साइट-टॉप> div.site-wrapper> div.top-content> आलेख> अनुभाग> उल> li: nth-child (2)> div.info> div> div> p '- शायद इस' li: nth-child (2) 'को' li' में बदलने की जरूरत है .. हालांकि शुरू करने के लिए एक जगह। – Clay

+3

@ क्लेटन यदि आप प्रदर्शित कोड को देखते हैं, तो मैंने यह टिप्पणी की है, क्योंकि मैंने इसे पहले ही कोशिश की है .. - बस उस कोड को दोबारा डालें, और यह केवल ** समाचार ** संग्रह पृष्ठ पर प्रदर्शित स्निपेट लौटाता है , हम शीर्ष पर यूआरएल घोषित कर रहे हैं जिसका मतलब है कि हम सामग्री पृष्ठों को भी स्क्रैप करने में सक्षम हैं। – Placeholder

उत्तर

4

समस्या यह है कि आप पुराने सामग्री को $news['content'] से साफ़ नहीं कर रहे हैं। तो जब आप दूसरे पृष्ठ को संसाधित करते हैं, तो आप अपनी सामग्री को पहले पृष्ठ की सामग्री में जोड़ रहे हैं। और तीसरा पृष्ठ इसे फिर से जोड़ता है, और इसी तरह।

$news['content'] = ''; 

रखो

foreach ($articles as $article) { 
+0

अब मैं उलझन में हूँ ..? जब मैं ऐसा करता हूं, तो यह सिर्फ एक त्रुटि देता है .. – Placeholder

+0

अपने आउटपुट को अधिक सावधानी से देखें। यह प्रत्येक पोस्ट के लिए एक ही सामग्री नहीं दिखा रहा है। शुरुआत एक ही है, लेकिन यह हर बार अधिक हो जाता है। – Barmar

+0

मैं निश्चित रूप से यह गलत तरीके से कर रहा हूं .. क्या आप कृपया अपनी पोस्ट को संपादित करने के लिए संपादित कर सकते हैं कि मुझे यह कैसे दिखाना चाहिए? क्योंकि '$ लेख ['सामग्री'] = '' ';' मेरे 'foreach ($ लेख के रूप में $ लेख) के ऊपर {' बस लाइन 43 पर एक त्रुटि देता है। – Placeholder

संबंधित मुद्दे