का उपयोग कर वेब साइट स्क्रैपिंग में समस्याएं मुझे कुछ वेब स्क्रैपिंग करने की आवश्यकता है। विभिन्न वेब परीक्षण ढांचे के साथ खेलने के बाद, जिनमें से अधिकतर मेरी धीमी (सेलेनियम) या मेरी जरूरतों के लिए बहुत छोटी गाड़ी (env.js), मैंने फैसला किया कि zombie.js सबसे अधिक आशाजनक दिखता है, क्योंकि यह HTML पार्सिंग के लिए पुस्तकालयों के ठोस सेट का उपयोग करता है और डोम हेरफेर। हालांकि, मुझे लगता है जैसे कि यह भी निम्नलिखित वेब पेज में जैसे बुनियादी घटना आधारित जावास्क्रिप्ट कोड का समर्थन नहीं करता:zombie.js
<html>
<head>
<title>test</title>
<script type="text/javascript">
console.log("test script executing...");
console.log("registering callback for event DOMContentLoaded on " + document);
document.addEventListener('DOMContentLoaded', function(){
console.log("DOMContentLoaded triggered");
}, false);
function loaded() {
console.log("onload triggered");
}
</script>
</head>
<body onload="loaded();">
<h1>Test</h1>
</body>
</html>
मैं तो इस तरह मैन्युअल रूप से उन घटनाओं को गति प्रदान करने का निर्णय लिया:
zombie = require("zombie");
zombie.visit("http://localhost:4567/", { debug: true }, function (err, browser, status) {
doc = browser.document;
console.log("firing DOMContentLoaded on " + doc);
browser.fire("DOMContentLoaded", doc, function (err, browser, status) {
body = browser.querySelector("body");
console.log("firing load on " + body);
browser.fire("load", body, function (err, browser, status) {
console.log(browser.html());
});
});
});
जो इस विशेष परीक्षण पृष्ठ के लिए काम करता है। मेरी समस्या एक सामान्य बात है, हालांकि: मैं फेसबुक पर दोस्तों की सूची जैसे कुछ जटिल, AJAX- आधारित साइटों को स्क्रैप करने में सक्षम होना चाहता हूं (http://www.facebook.com/profile.php?id=100000028174850&sk=friends&v=friends जैसे कुछ)। ज़ोंबी का उपयोग करके साइट में लॉग इन करने में कोई समस्या नहीं है, लेकिन उन सूचियों की तरह कुछ सामग्री पूरी तरह से AJAX का उपयोग करके गतिशील रूप से लोड हो रही है, और मुझे नहीं पता कि लोडिंग शुरू करने वाले ईवेंट हैंडलर को कैसे ट्रिगर करना है।
कई सवाल मैं इस समस्या के बारे में है के होते हैं:
- किसी को पहले से ही रिमोट नियंत्रित सेलेनियम की तरह समाधान एक ब्राउज़र का उपयोग किए बिना एक इसी तरह जटिल स्क्रेपर लागू किया गया है?
- क्या जटिल जावास्क्रिप्ट-आधारित पृष्ठ की लोडिंग प्रक्रिया पर कुछ संदर्भ है?
- क्या कोई फेसबुक ब्राउज़र ईवेंट हैंडलर ट्रिगर करने के लिए मुझे निष्पादित करने की आवश्यकता हो सकती है, यह देखने के लिए कोई वास्तविक ब्राउज़र डीबग करने के बारे में सलाह दे सकता है?
- इस विषय के बारे में कोई अन्य विचार?
फिर से, कृपया मुझे सेलेनियम जैसे वास्तविक ब्राउज़र को नियंत्रित करने वाले समाधानों को इंगित न करें, जैसा कि मैं उन लोगों के बारे में जानता हूं। तथापि स्वागत रूबी पटकथा भाषा से सुलभ वेबकिट की तरह एक असली में-स्मृति रेंडरर के लिए सुझाव क्या हैं है, लेकिन संभावना के साथ अधिमानतः कुकी सेट करने और अधिमानतः भी बजाय वास्तविक HTTP अनुरोध को ट्रिगर के कच्चे HTML लोड।
क्या आप जावास्क्रिप्ट परीक्षण ढांचे, या एक वेब डेटा-निष्कर्षण उपकरण की तलाश में हैं? यदि आप केवल एक स्क्री-स्क्रैपिंग टूल की तलाश में हैं, तो संभवतः AJAX- भारी वाले लोगों को अपने जावास्क्रिप्ट को निष्पादित किए बिना अधिकांश साइटों को स्क्रैप करना संभव है। – chesles
सवाल वेब स्क्रैपिंग के बारे में है। आप सही हैं, जेएस निष्पादित किए बिना अक्सर ऐसा करना संभव है, उदा। मैन्युअल रूप से आरईएसटी अनुरोध जारी करके। फेसबुक के मामले में, साइट के मोबाइल संस्करण को स्क्रैप करना केवल HTTP और HTML पार्सिंग का उपयोग करके काफी संभव है। लेकिन मुझे एक सामान्य समाधान में रूचि है जो जावास्क्रिप्ट को समझता है और वास्तविक ब्राउजर इंस्टेंस की आवश्यकता नहीं है। यह संभव है, जैसा कि env.Js और zombie.Js दिखाते हैं, लेकिन ऐसा लगता है कि यह एक चाल समस्या है। –