2012-05-19 26 views
5

के साथ छवियों के लिए सबसे प्रासंगिक शीर्षक या विवरण प्राप्त करें जो मैं देख रहा हूं वह अनिवार्य रूप से एक ही बात है जो एक ट्वीट बटन या फेसबुक शेयर/पसंद बटन करता है, और यह एक पृष्ठ और सबसे अधिक स्क्रैप करना है डेटा के एक टुकड़े के लिए प्रासंगिक शीर्षक। सबसे अच्छा उदाहरण मैं सोच सकता हूं कि जब आप कई लेखों वाली वेबसाइट के सामने वाले पृष्ठ पर होते हैं और आप एक बटन जैसे बटन पर क्लिक करते हैं। इसके बाद इसे पसंद बटन (निकटतम) के सापेक्ष पोस्ट के लिए उचित जानकारी मिल जाएगी। कुछ साइटों में ओपन ग्राफ टैग होते हैं, लेकिन कुछ नहीं करते हैं और यह अभी भी काम करता है।दूरस्थ रूप से स्क्रैप पेज और XPath

चूंकि यह दूरस्थ रूप से किया जाता है, मेरे पास केवल उस डेटा का नियंत्रण होता है जिसे मैं लक्षित करना चाहता हूं। इस मामले में डेटा छवियां हैं। पृष्ठ के केवल <title> को पुनर्प्राप्त करने के बजाय, मैं किसी भी तरह से प्रत्येक छवि के शुरुआती बिंदु से विपरीत में डोम को पार करने के लिए देख रहा हूं, और निकटतम "शीर्षक" ढूंढता हूं। समस्या यह है कि सभी शीर्षक एक छवि से पहले नहीं होते हैं। हालांकि, इस मामले में शीर्षक के बाद होने वाली छवि का मौका काफी अधिक लगता है। इसके साथ ही, यह मेरी आशा है कि यह लगभग किसी भी साइट के लिए अच्छी तरह से काम करे।

विचार:

  • छवि के "कंटेनर" का पता लगाएं और फिर पाठ की पहली ब्लॉक का उपयोग करें।
  • कुछ वर्गों ("विवरण", "शीर्षक") या तत्वों (एच 1, एच 2, एच 3, एच 4) वाले तत्वों में पाठ के ब्लॉक खोजें।

शीर्षक बैकअप: निकाला जा रहा है छवियों:

  • का उपयोग करते हुए ओपन ग्राफ़ टैग
  • सिर्फ <title>
  • का उपयोग करना ALT टैग का प्रयोग केवल
  • मेटा टैग

सारांश का उपयोग करना समस्या नहीं है, यह उनके लिए प्रासंगिक शीर्षक कैसे प्राप्त करें।

प्रश्न: आप प्रत्येक छवियों के लिए प्रासंगिक शीर्षक प्राप्त करने के बारे में कैसे जाएंगे? शायद DomDocument या XPath का उपयोग कर रहे हैं?

+0

सच में, आप PHP के साथ स्क्रैप के बाद, अगर आप इसे एक छोटे से जावा वेब सर्वर पर आरईएसटी कॉल के माध्यम से बंद कर सकते हैं, आप आसानी से उन सभी तत्वों और विशेषताओं तक पहुंच प्राप्त करने के लिए JSOUP का उपयोग कर सकते हैं। JSOUP जावा के लिए jQuery की तरह है और एक ही वाक्यविन्यास का उपयोग करता है। काश यह PHP के लिए उपलब्ध था क्योंकि इससे आपकी समस्या सेकंड में दूर हो जाएगी! – jmort253

+0

कई पुस्तकालय उपलब्ध हैं जो पृष्ठों से सामग्री निष्कर्षण से निपटते हैं, हालांकि मुझे छवियों के साथ सीधे सौदे करने वाले किसी के बारे में पता नहीं है। लेकिन आपको कुछ विचार और दिशानिर्देश मिल सकते हैं, या उनका उपयोग करने में सक्षम हो सकते हैं। यहां एक है: http://code.google.com/p/boilerpipe/wiki/Components –

+1

आपके विचारों के लिए धन्यवाद।मैंने छवियों को स्वयं प्राप्त करने के बजाय प्रत्येक छवि के लिए प्रासंगिक शीर्षक या विवरण प्राप्त करने के पीछे "तर्क" के अधिक से अधिक लक्षित करने के लिए अपना प्रश्न अपडेट कर दिया है। – stwhite

उत्तर

1

आपका दृष्टिकोण काफी अच्छा लगता है, मैं केवल कुछ टैग/विशेषताओं को XPath क्वेरी के साथ वजन और लूप देता हूं जब तक कि मुझे कुछ ऐसा नहीं मिलता है और यह शून्य नहीं है। कुछ की तरह:

i = 0 

while (//img[i][@src]) 
    if (//img[i][@alt]) 
    return alt 
    else if (//img[i][@description]) 
    return description 
    else if (//img[i]/../p[0]) 
    return p 
    else 
    return (//title) 

    i++ 

एक साधारण XPath उदाहरण (समारोह ported from my framework):

function ph_DOM($html, $xpath = null) 
{ 
    if (is_object($html) === true) 
    { 
     if (isset($xpath) === true) 
     { 
      $html = $html->xpath($xpath); 
     } 

     return $html; 
    } 

    else if (is_string($html) === true) 
    { 
     $dom = new DOMDocument(); 

     if (libxml_use_internal_errors(true) === true) 
     { 
      libxml_clear_errors(); 
     } 

     if ($dom->loadHTML(ph()->Text->Unicode->mb_html_entities($html)) === true) 
     { 
      return ph_DOM(simplexml_import_dom($dom), $xpath); 
     } 
    } 

    return false; 
} 

और वास्तविक उपयोग:

$html = file_get_contents('http://en.wikipedia.org/wiki/Photography'); 

print_r(ph_DOM($html, '//img')); // gets all images 
print_r(ph_DOM($html, '//img[@src]')); // gets all images that have a src 
print_r(ph_DOM($html, '//img[@src]/..')); // gets all images that have a src and their parent element 
print_r(ph_DOM($html, '//img[@src]/../..')); // and so on... 
print_r(ph_DOM($html, '//title')); // get the title of the page 
+0

मैं XPath के बारे में पढ़ रहा हूं और वास्तव में कुछ विकल्पों का परीक्षण करना शुरू कर दिया है, लेकिन क्या आप इस पर विस्तार कर सकते हैं? नोड्स के बीच की दूरी ढूंढना एक अच्छा विचार है, हालांकि मैं अभी तक समाधान के साथ नहीं आया हूं। – stwhite

+0

@stwhite: असल में यह मेरा विचार नहीं था, आप केवल उच्चतम स्तर की विशिष्टता ('img' टैग) से शुरू करते हैं और अपना रास्ता तब तक काम करते हैं जब तक आपको कुछ ऐसा नहीं मिलता जिसे आप वर्णनात्मक मानना ​​चाहते हैं। –

+0

मुझे एहसास है कि यह आपका प्रारंभिक विचार नहीं था, लेकिन क्या आपके पास कोई नोड्स के बीच की दूरी को प्राप्त करने के बारे में कोई विचार है? उदाहरण के लिए, वर्तमान छवि की स्थिति को पिछले एच 1 में छवि से दूरी को पिछली एच 2 तक की दूरी पर ढूंढना। यह प्रतीत होता है कि इसका स्कोर एक "बेहतर" शीर्षक होने की संभावना है। अनिवार्य रूप से यह वास्तव में होगा जो पहले आया था या जो छवि के करीब है। – stwhite

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

  • कोई संबंधित समस्या नहीं^_^