2013-11-26 6 views
5

मैं निम्नलिखित वेबपेज डाउनलोड करने की आवश्यकता भरी हुई है: http://m.10bet.com/#leage_panel#10096साइट scraping: प्रतीक्षा कर रहा है जब तक साइट को पूरी तरह से

यह एक sportsbetting पेज है और मैं उद्धरण की जरूरत है। तो, पहली जगह में यह बहुत आसान लगता है। हालांकि, यहां क्या होता है (यदि आप इस उदाहरण के साथ जांच कर सकते हैं अपने ब्राउज़र के डेवलपर उपकरण।): यूआरएल

  • पेज एक प्रारंभिक एचटीएमएल कि बाद में उद्धरण प्राप्त करने देती है ajax अनुरोध का आह्वान लोड करता है

    1. ओपन
    2. हालांकि, उद्धरण जेसन में निहित है लेकिन वे इस तरह से परेशान हैं कि उन्हें सीधे AJAX कॉल से सीधे पार्स करना संभव नहीं है। इसके अतिरिक्त वेबपृष्ठ की जावास्क्रिप्ट भी obpuscated है। तो अनुरोध से उद्धरण सीधे पढ़ने का कोई मौका नहीं है।

    इसके बजाय, मुझे जावास्क्रिप्ट का मूल्यांकन करने में सक्षम एक हेडलेस ब्राउज़र का उपयोग करने की आवश्यकता होगी। जावा के लिए HTMLUnit अपर्याप्त है क्योंकि यह मजबूत जावास्क्रिप्ट कार्यक्षमता प्रदान नहीं करता है। इसलिए कैसरजेएस के साथ संयोजन में फैंटॉमजेएस मेरी वर्तमान पसंद है। मैं निम्नलिखित स्क्रिप्ट के साथ कैस्परजेएस लागू करता हूं:

    var casper = require('casper').create(); 
    
    casper.start('http://m.10bet.com/#leage_panel#10096', function() { 
        var url = 'http://m.10bet.com/#leage_panel#10096'; 
        this.download(url, '10bet.html'); 
    }); 
    
    casper.run(function() { 
        this.echo('Done.').exit(); 
    }); 
    

    हालांकि, यह स्क्रिप्ट पूरा पृष्ठ लोड नहीं करती है। बस प्रारंभिक पृष्ठ। ब्राउजर में प्रस्तुत किए गए पूरे वेबपृष्ठ को मैं कैसे लोड करूं?

  • +0

    मैं उन उपकरणों से परिचित नहीं हूं, लेकिन क्या आप अपना कोड 'domready' ईवेंट में संलग्न कर सकते हैं? ऐसा हो सकता है। – halfer

    उत्तर

    7

    वह स्क्रिप्ट अच्छी शुरुआत की तरह दिखती है, लेकिन जैसे ही आपका (एचटीएमएल) पृष्ठ लोड होता है, (कैस्परजेएस) स्क्रिप्ट बंद हो जाती है, क्योंकि आपने इसे और निर्देश नहीं दिए हैं। कारणों की एक जोड़ी के लिए

    var casper = require('casper').create(); 
    var fs=require('fs'); 
    
    casper.start('http://m.10bet.com/#leage_panel#10096', function() { 
        this.wait(2000, function() { 
         fs.write("10bet.html", this.getHTML()); 
        }); 
    }); 
    
    casper.run(); 
    

    एक 2000ms टाइम-आउट कच्चे तेल है: इसे ठीक करने के crudest तरह से सेकंड के एक जोड़े के लिए सोने के लिए जाने के लिए हो सकता है, तो पेज खुरच

    1. हैं डेटा उस समय से तेज़ हो जाता है जब आप समय बर्बाद कर रहे हैं।
    2. यदि यह धीमा हो जाता है तो आपकी स्क्रिप्ट काम नहीं करती है।

    तो पेज पर कुछ पहचानना बेहतर है और वहां रहने की आवश्यकता है, और फिर कैस्पर के waitForXXX() कार्यों में से एक का उपयोग करें। यहां से शुरू होने वाले एपीआई दस्तावेज़ देखें: http://casperjs.readthedocs.org/en/latest/modules/casper.html#waitfor

    एक और बिंदु के रूप में, मुझे लगता है कि आप वास्तव में पूरे HTML पृष्ठ को नहीं चाहते हैं, बस इसमें डेटा। getHTML() प्राप्त होने वाले फ़िल्टर को फ़िल्टर करने के लिए पैरामीटर लेता है। जैसे आपके मामले में getHTML('#league_block') अधिक उपयोगी हो सकता है। फिर, अधिक विचारों के लिए एपीआई दस्तावेज़ देखें।

    +0

    हे डैरेन! तुम बहुत जल्दी थे। मैं बस अपने सुझावों के उत्तर के रूप में अपने सुझाव पोस्ट करना चाहता था। मैंने waitForResource (...) का उपयोग किया। पूरी तरह से ठीक काम करता है। आपकी सहायताके लिए धन्यवाद! :) – toom

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

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