2009-12-20 27 views
15

का उपयोग कर वेबसाइट स्क्रैपिंग मैं किसी दिए गए यूआरएल के एचटीएमएल में हेरफेर करने में सक्षम होना चाहता हूं। एचटीएमएल स्क्रैपिंग की तरह कुछ। मुझे पता है कि यह कर्ल या कुछ स्क्रैपिंग लाइब्रेरी का उपयोग करके किया जा सकता है। लेकिन मैं जानना चाहता हूं कि AJAX का उपयोग करके यूआरएल के लिए अनुरोध प्राप्त करने के लिए jquery का उपयोग करना संभव है और यूआरएल के एचटीएमएल को पुनः प्राप्त करें, और jquery code पर चलाएं एचटीएमएल वापस आ गया?jquery और AJAX

आप

+0

जिनका HTML आप संशोधित करना चाहते हैं? क्या आपके पास उस यूआरएल के लिए लिखने के अधिकार हैं? –

+1

ध्यान दें कि यह भी संभव है (अब) nodejs + jsdom के साथ कुछ ऐसा करने के लिए। – HoverHell

उत्तर

1

http://www.nathanm.com/ajax-bypassing-xmlhttprequest-cross-domain-restriction/

धन्यवाद केवल समस्या यह है कि दोनों इंटरनेट एक्सप्लोरर और फ़ायर्फ़ॉक्स में सुरक्षा के कारण, XMLHttpRequest ऑब्जेक्ट या क्रॉस-डोमेन, पार से प्रोटोकॉल बनाने के लिए अनुमति नहीं है, है क्रॉस-पोर्ट अनुरोध।

4

आप Same Origin Policy की वजह से, एक अपनी वेबसाइट पर है की तुलना में किसी अन्य डोमेन नाम के लिए Ajax अनुरोध नहीं कर सकते; जिसका मतलब है कि आप जो भी चाहते हैं वह करने में सक्षम नहीं होंगे ... कम से कम सीधे।

एक समाधान होगा:

  • अपने खुद के सर्वर पर "प्रॉक्सी" के कुछ प्रकार है,
  • ,
  • कि प्रॉक्सी के लिए अपने अजाक्स अनुरोध भेजने के जो, बारी में, लायेगा अन्य डोमेन नाम पर पृष्ठ; और अजाक्स अनुरोध के जवाब के रूप में इसे अपने जेएस कोड पर वापस कर दें।

यह लगभग किसी भी भाषा के साथ लाइनों के एक जोड़े में किया जा सकता (PHP जैसे, कर्ल का उपयोग कर, उदाहरण के लिए) ... या फिर आप अपने वेब सर्वर के कुछ functionnality उपयोग करने में सक्षम हो सकता है (mod_proxy देखना और mod_proxy_http, उदाहरण के लिए, अपाचे के लिए)

+0

समान उत्पत्ति नीति सफारी पर एक मुद्दा नहीं है और ठीक से प्रारंभिक क्रोम है। –

0
कर्ल करने के बजाय

, आप Selenium जैसे उपकरण जो ब्राउज़र में पेज लोड हो रहा है स्वचालित करेगा इस्तेमाल कर सकते हैं। आप इसके साथ जावास्क्रिप्ट चला सकते हैं।

8

मैं यह इंगित करना चाहता हूं कि ऐसी स्थितियां हैं जहां डोमेन पर स्क्रीन स्क्रैप करने के लिए jQuery का उपयोग करने के लिए पूरी तरह से स्वीकार्य है। विंडोज साइडबार गैजेट 'स्थानीय मशीन जोन' में चलाते हैं जो क्रॉस डोमेन स्क्रिप्टिंग को अनुमति देता है।

और jQuery में एचटीएमएल सामग्री को पुनः प्राप्त करने के लिए चयनकर्ताओं को लागू करने की क्षमता है। आपको स्पेस के बाद लोडर() विधि के यूआरएल पैरामीटर में चयनकर्ता को जोड़ने की जरूरत है।

नीचे उदाहरण गैजेट कोड इस पृष्ठ को हर घंटे जांचता है और पृष्ठ दृश्यों की कुल संख्या की रिपोर्ट करता है।

<html> 
<head> 
    <script type="text/javascript" src="jquery.min.js"></script> 
    <style> 
     body { 
      height: 120px; 
      width: 130px; 
      background-color: white; 
     }; 
    </style> 
</head> 

<body> 
Question Viewed: 
<div id="data"></div> 

<script type="text/javascript"> 

    var url = "http://stackoverflow.com/questions/1936495/website-scraping-using-jquery-and-ajax" 

    updateGadget(); 

    inervalID = setInterval("updateGadget();", 60 * 1000); 

    function updateGadget(){ 

     $(document).ready(function(){ 
      $("#data").load(url + " .label-value:contains('times')"); 
     }); 

    } 

</script> 

</body> 
</html> 
+0

मैं इस शब्दशः भाग गया और यह काम नहीं लग रहा है? फायरबग केवल लाल रंग में मिलता है ... जिसे मैं लेता हूं इसका मतलब है "अस्वीकार"। –

+2

मुझे नहीं लगता कि एजेक्स के साथ मौजूद क्रॉस-डोमेन नीतियों के आसपास हो जाएगा - आप केवल इस कोड को स्टैक ओवरफ्लो साइट के भीतर तैनात करने में सक्षम होंगे। –

+0

समान उत्पत्ति नीति सफारी पर एक मुद्दा नहीं है और ठीक से प्रारंभिक क्रोम –

0

मैं एक छोटे से पीएचपी प्रॉक्सी के साथ ऐसा करते हैं, अस्थायी रूप से आईएमजी टैग अलग करना लोड समय की गति के लिए। मैंने इसे एक jQuery प्लगइन में लपेट लिया है जो इसे उपयोग करने में अपेक्षाकृत आसान बनाता है, here डेमो/गीथब लिंक

3

यह मुश्किल नहीं है।

$(document).ready(function() { 
    baseUrl = "http://www.somedomain.com/"; 
    $.ajax({ 
    url: baseUrl, 
    type: "get", 
    dataType: "", 
    success: function(data) { 
     //do something with data 
    } 
    }); 
}); 

मुझे लगता है यह आप एक अच्छे सुराग दे सकते हैं - http://jsfiddle.net/skelly/m4QCt/

+3

आपका जेएसफ़िल्ड काम नहीं करता है: 'https://raw.github.com/padolsey/jQuery-Plugins/master/cross- से स्क्रिप्ट निष्पादित करने से इंकार कर दिया गया है। डोमेन-AJAX/jquery.xdomainajax.js 'क्योंकि इसका एमआईएमई प्रकार (' टेक्स्ट/सादा ') निष्पादन योग्य नहीं है, और सख्त एमआईएम प्रकार की जांच सक्षम है। (अनुक्रमणिका): 1 XMLHttpRequest http://www.mashable.com/ लोड नहीं कर सकता है। अनुरोधित संसाधन पर 'पहुंच-नियंत्रण-अनुमति-उत्पत्ति' शीर्षलेख मौजूद नहीं है। उत्पत्ति 'http://fiddle.jshell.net' इसलिए पहुंच की अनुमति नहीं है ' – 8bitjunkie