2011-02-16 14 views
8

मैं कुछ ब्लॉगों को मकड़ी बनाना चाहता हूं और प्रोग्रामेटिक रूप से उनके एचटीएमएल और सीएसएस-आधारित लेआउट का विश्लेषण करना चाहता हूं उदा। यदि साइडबार मुख्य सामग्री के बाएं या दाएं ओर है, तो कितने कॉलम और वे कितने चौड़े हैं।प्रोग्रामेटिक रूप से सीएसएस लेआउट का विश्लेषण

मैं यह कैसे सबसे अच्छा तरीका करूँगा? क्या कोई उपकरण या पुस्तकालय मैं उपयोग कर सकता हूं?

(मैं अजगर या PHP में एक समाधान पसंद करेंगे।)

+0

यह इस सामान्य रूप से करने के लिए मुश्किल लग रहा है। आपको केवल ब्लॉग की जांच करने की अपनी बाधा से मदद मिल सकती है, क्योंकि कुछ समानता हो सकती है - उदाहरण के लिए, वे एक ज्ञात टेम्पलेट का उपयोग कर रहे हैं। – thirtydot

उत्तर

0

ऐसा लगता है कि यह इस तरह एक जावास्क्रिप्ट कुछ के साथ PhantomJS के माध्यम से प्राप्त किया जा सकता,:

phantom.viewportSize = { width: 1024, height: 768 }; 

var page = new WebPage(); 

page.open("http://mashable.com/", function(status) { 
    if (status === "success") 
    { 
     page.includeJs("https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js", function() { 
      var position = page.evaluate(function() { 
       return jQuery('#sidebar').position(); 
      }); 

      // Now position.left and position.top contains the 
      // position of the #sidebar element. Use other 
      // jQuery functions to calculate the relative position. 

      phantom.exit(); 
     }); 
    } 
}); 
0

आप इस के लिए देख रहे हैं?

http://cthedot.de/cssutils/

यह एक गूगल खोज पर पहली हिट फिल्म साबित हुई। कम से कम चार अन्य लोग वादा कर रहे थे। शायद आपको Google को आजमाएं, जो मिला है उसे सूचीबद्ध करें, और विशिष्ट पैकेजों पर विशिष्ट सलाह मांगें।

+0

अब अच्छा लग रहा है। :) लेकिन क्या यह पार्सर वास्तव में तत्वों की अंतिम स्थिति की गणना करने में सक्षम होने जा रहा है? मुझे यकीन नहीं है, क्योंकि पूरे दस्तावेज़ को प्रस्तुत करने और दस्तावेज़ के प्रवाह की भविष्यवाणी करने की आवश्यकता होगी। वैसे भी, यह ज्यादातर मामलों के लिए पर्याप्त हो सकता है वैसे भी –

+0

आपने क्या खोजा? मुझे वह नहीं मिल रहा है। वैसे भी, सीएसएस को पार्स करना केवल एक कदम है। –

+0

@ क्रिस्टियन डेवन: "पायथन सीएसएस पार्सर" http://www.google.com/search?client=safari&rls=en&q=python+css+parser&ie=UTF-8&oe=UTF-8। दूसरा हिस्सा साइट डाउनलोड कर रहा है।आपके पास 'urllib2',' curl' और http://curl.haxx.se/libcurl/python/ है। यह उतना ही स्पष्ट है, मुझे लगता है। –

2

यह शुद्ध सर्वर-साइड सीएसएस और एचटीएमएल पार्सिंग का उपयोग करने के लिए एक बेहद कठिन काम की तरह लगता है - विश्वसनीय परिणाम प्राप्त करने के लिए आपको ब्राउज़र के प्रतिपादन इंजन को प्रभावी ढंग से फिर से बनाना होगा।

क्या आप के लिए यह जरूरत पर निर्भर करता है, मैंने कहीं इन पंक्तियों के साथ एक तरह से के बारे में सोच सकता है:

  • --page-requisites

  • के साथ पृष्ठों और स्टाइल शीट wget की तरह कुछ का उपयोग कर लायें तो या तो:

    • Selenium जैसे टूल का उपयोग करके प्रत्येक डाउनलोड किए गए पृष्ठ के माध्यम से चलें, तत्व नामों की खोज करें और उनकी स्थिति आउटपुट करें (यदि सेलेनियम में यह संभव है। मुझे लगता है कि यह है, लेकिन मुझे यकीन नहीं है)

    • jQuery का एक टुकड़ा बनाएं जिसे आप डाउनलोड किए गए प्रत्येक पृष्ठ में इंजेक्ट करते हैं। "साइडबार", "टूलबार" नामक तत्वों के लिए jQuery खोज, उनकी स्थिति प्राप्त करती है, परिणाम को स्थानीय AJAX स्निपेट में सहेजती है, और अगले डाउनलोड किए गए पृष्ठ पर जारी रहती है। आपको ब्राउज़र में केवल पहला पृष्ठ खोलने की आवश्यकता है, शेष स्वचालित रूप से हो जाएंगे। कार्यान्वित करने के लिए तुच्छ नहीं है लेकिन संभव है।

आप नेट की तरह एक ग्राहक के पक्ष अनुप्रयोग मंच का उपयोग कर सकते हैं, तो आप यह है कि एक ब्राउज़र नियंत्रण, जिसका डोम आप केवल jQuery का उपयोग कर अधिक से अधिक स्वतंत्र रूप से उपयोग कर सकते हैं को शामिल किया गया एक कस्टम अनुप्रयोग का निर्माण बंद आसान हो सकता है।

+0

आप [क्रोमडेवटूलप्रोटोकॉल] (http://code.google.com/p/chromedevtools/wiki/ChromeDevToolsProtocol) पर Google क्रोम के एक उदाहरण से बात भी कर सकते हैं। – macedoine

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