2009-03-25 6 views
61

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

जावास्क्रिप्ट के साथ इसे कैसे प्राप्त किया जा सकता है? क्रिप्या मेरि सहायता करे।

+7

@mikenvck जब आप जावास्क्रिप्ट के बारे में सवाल करते थे तो आपने PHP का भी उल्लेख क्यों किया? नीचे दिए गए उत्तरों से पता चलता है कि जावास्क्रिप्ट के साथ ऐसा कैसे करें। – corgrath

+0

यहां एक ही पृष्ठ है जिसे आप अपना उत्तर प्राप्त कर सकते हैं क्योंकि यह HTML पृष्ठ के स्रोत प्राप्त करने की मेरी समस्या को हल करता है http://stackoverflow.com/questions/1367587/javascript-page-source-code –

+1

कोई भी उत्तर मूल जावास्क्रिप्ट नहीं था , वे सभी jquery आधारित थे। एक लिंक के स्रोत प्राप्त करने के लिए – ILikeTacos

उत्तर

5

सुरक्षा उपाय के रूप में, जावास्क्रिप्ट विभिन्न डोमेन से फ़ाइलों को नहीं पढ़ सकता है। यद्यपि इसके लिए कुछ अजीब कामकाज हो सकता है, मैं इस कार्य के लिए एक अलग भाषा पर विचार करता हूं।

2

यदि आपको पूरी तरह से जावास्क्रिप्ट का उपयोग करने की आवश्यकता है, तो आप पृष्ठ स्रोत को AJAX अनुरोध के साथ लोड कर सकते हैं।

ध्यान दें कि जावास्क्रिप्ट के साथ, आप अनुरोध पृष्ठ के साथ उसी डोमेन के अंतर्गत स्थित पृष्ठों को पुनर्प्राप्त कर सकते हैं।

7

आप आवश्यक यूआरएल हिट करने के लिए XmlHttp (AJAX) का उपयोग कर सकते हैं और यूआरएल से एचटीएमएल प्रतिक्रिया responseText संपत्ति में उपलब्ध होगी। यदि यह वही डोमेन नहीं है, तो आपके उपयोगकर्ताओं को एक ब्राउज़र अलर्ट प्राप्त होगा जैसे "यह पृष्ठ किसी भिन्न डोमेन तक पहुंचने का प्रयास कर रहा है। क्या आप इसे अनुमति देना चाहते हैं?"

+0

दुर्भाग्यवश, आपको कोई अलर्ट प्राप्त नहीं होगा, यह केवल – Alex

3

jQuery

का उपयोग
<html> 
<head> 
<script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.js" ></script> 
</head> 
<body> 
<script> 
$.get("www.google.com", function(response) { alert(response) }); 
</script> 
</body> 
+7

अनुरोध को अवरुद्ध कर देगा, आप इस तरह से अपने डोमेन के बाहर किसी पृष्ठ का अनुरोध नहीं कर सकते हैं, आपको इसे प्रॉक्सी के माध्यम से करना होगा, उदा। $ .get ('http://mydomain.com/?url=www.google.com') – karim79

28

जावास्क्रिप्ट इस्तेमाल किया जा सकता है, जब तक आप हड़पने के रूप में जो कुछ पेज आप अपने डोमेन पर एक प्रॉक्सी के माध्यम से करने के बाद कर रहे हैं:

<html> 
<head> 
<script src="/js/jquery-1.3.2.js"></script> 
</head> 
<body> 
<script> 
$.get("www.mydomain.com/?url=www.google.com", function(response) { 
    alert(response) 
}); 
</script> 
</body> 
+2

डोमेन आधारित प्रॉक्सी की आवश्यकता क्यों है? –

+1

समान उत्पत्ति नीति – Ferdi265

+0

की वजह से यह वास्तव में दिलचस्प है। ऐसा करने के लिए सर्वर पर स्थापित करने के लिए संभवतः कुछ कोड है? –

105

सरल शुरू करने के लिए जिस तरह से, jQuery कोशिश

$("#links").load("/Main_Page #jq-p-Getting-Started li"); 

अधिक jQuery Docs

01,235,164 पर

एक और अधिक संरचित तरीके से स्क्रीन स्क्रैप करने का एक और तरीका YQL or Yahoo Query Language. का उपयोग करना है यह जेएसओएन या एक्सएमएल के रूप में संरचित स्क्रैप किए गए डेटा को वापस कर देगा।
उदा।
आइए खरोंच stackoverflow.com

select * from html where url="http://stackoverflow.com" 

आप एक JSON सारणी (मुझे लगता है कि विकल्प चुना है) इस

"results": { 
    "body": { 
    "noscript": [ 
    { 
     "div": { 
     "id": "noscript-padding" 
     } 
    }, 
    { 
     "div": { 
     "id": "noscript-warning", 
     "p": "Stack Overflow works best with JavaScript enabled" 
     } 
    } 
    ], 
    "div": [ 
    { 
     "id": "notify-container" 
    }, 
    { 
     "div": [ 
     { 
     "id": "header", 
     "div": [ 
     { 
      "id": "hlogo", 
      "a": { 
      "href": "/", 
      "img": { 
      "alt": "logo homepage", 
      "height": "70", 
      "src": "http://i.stackoverflow.com/Content/Img/stackoverflow-logo-250.png", 
      "width": "250" 
      } 
…….. 

इस का सौंदर्य यह है कि आप अनुमानों और जहां क्या कर सकते हैं की तरह दे देंगे क्लॉज जो अंततः आपको स्क्रैप किए गए डेटा संरचित और डेटा को केवल डेटा की आवश्यकता होती है (अंततः तार पर बहुत कम बैंडविड्थ)
ई।जी

select * from html where url="http://stackoverflow.com" and 
     xpath='//div/h3/a' 

आप

"results": { 
    "a": [ 
    { 
    "href": "https://stackoverflow.com/questions/414690/iphone-simulator-port-for-windows-closed", 
    "title": "Duplicate: Is any Windows simulator available to test iPhone application? as a hobbyist who cannot afford a mac, i set up a toolchain kit locally on cygwin to compile objecti … ", 
    "content": "iphone\n    simulator port for windows [closed]" 
    }, 
    { 
    "href": "https://stackoverflow.com/questions/680867/how-to-redirect-the-web-page-in-flex-application", 
    "title": "I have a button control ....i need another web page to be redirected while clicking that button .... how to do that ? Thanks ", 
    "content": "How\n    to redirect the web page in flex application ?" 
    }, 
….. 

अब केवल सवाल हम एक

select title from html where url="http://stackoverflow.com" and 
     xpath='//div/h3/a' 

नोट अनुमानों में शीर्षक कर पाने के लिए मिल जाएगा

"results": { 
    "a": [ 
    { 
    "title": "I don't want the function to be entered simultaneously by multiple threads, neither do I want it to be entered again when it has not returned yet. Is there any approach to achieve … " 
    }, 
    { 
    "title": "I'm certain I'm doing something really obviously stupid, but I've been trying to figure it out for a few hours now and nothing is jumping out at me. I'm using a ModelForm so I can … " 
    }, 
    { 
    "title": "when i am going through my project in IE only its showing errors A runtime error has occurred Do you wish to debug? Line 768 Error:Expected')' Is this is regarding any script er … " 
    }, 
    { 
    "title": "I have a java batch file consisting of 4 execution steps written for analyzing any Java application. In one of the steps, I'm adding few libs in classpath that are needed for my co … " 
    }, 
    { 
…… 

एक बार जब आप अपनी क्वेरी लिखने इसके लिए आप

http://query.yahooapis.com/v1/public/yql?q=select%20title%20from%20html%20where%20url%3D%22http%3A%2F%2Fstackoverflow.com%22%20and%0A%20%20%20%20%20%20xpath%3D'%2F%2Fdiv%2Fh3%2Fa'%0A%20%20%20%20&format=json&callback=cbfunc

हमारे मामले में

एक यूआरएल उत्पन्न करता है।

तो अंत में आप अंत इस

var titleList = $.getJSON(theAboveUrl); 

की तरह कुछ कर रही है और इसके साथ खेलते हैं।

सुंदर, है ना?

+4

शानदार, विशेष रूप से याहू में गरीब व्यक्ति के समाधान को संकेत देने के लिए जो डेटा लाने के लिए प्रॉक्सी की आवश्यकता को समाप्त करता है। धन्यवाद!! मैंने query.yahooapis.com पर अंतिम डेमो-लिंक को ठीक करने की स्वतंत्रता ली: यूआरएल-एन्कोडिंग में यह एक% संकेत गुम था। कूल कि यह अभी भी काम करता है !! – GitaarLAB

+0

कोई विचार है कि http://www.amazon.in/Xiaomi-Redmi-4A-Grey-16GB/dp/B01FM7K078?_encoding=UTF8&psc=1&refRID=87MVWA5E1E8PEBZE8XZN&ref_=nav_custrec_signin&ref_=pd_rhf_gw_p_img_1 से छवि और मेटा विवरण को कैसे स्क्रैप करें? –

+4

अब समर्थित नहीं है! –

0

आप XmlHttpRequest उत्पन्न कर सकते हैं और पृष्ठ का अनुरोध कर सकते हैं, और फिर सामग्री प्राप्त करने के लिए getResponseText() का उपयोग कर सकते हैं।

0

आप फ़ाइल प्राप्त करने के लिए FileReader API का उपयोग कर सकते हैं, और फ़ाइल चुनते समय, अपने वेब पेज का यूआरएल चयन बॉक्स में डाल दें। इस कोड का उपयोग करें:

function readFile() { 
    var f = document.getElementById("yourfileinput").files[0]; 
    if (f) { 
     var r = new FileReader(); 
     r.onload = function(e) { 
     alert(r.result); 
     } 
     r.readAsText(f); 
    } else { 
     alert("file could not be found") 
    } 
    } 
} 
0

आप या तो एक ब्राउज़र एक्सटेंशन बनाने या यहां तक ​​कि विंडोज (एचटीएमएल आवेदन) में .hta के रूप में फ़ाइल को सहेज कर एक ही मूल-नीति को बायपास कर सकते हैं।

-1

इसके विपरीत कई टिप्पणियों के बावजूद मेरा मानना ​​है कि सरल जावास्क्रिप्ट के साथ एक ही मूल आवश्यकता को दूर करना संभव है।

मैं दावा नहीं कर रहा हूं कि निम्नलिखित मूल है क्योंकि मुझे विश्वास है कि मैंने कुछ समय पहले कुछ और देखा था।

मैंने केवल मैक पर सफारी के साथ इसका परीक्षण किया है।

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

<html> 
<head> 
<base href='http://apod.nasa.gov/apod/'> 
<title>test</title> 
<style> 
body { margin: 0 } 
textarea { outline: none; padding: 2em; width: 100%; height: 100% } 
</style> 
</head> 
<body onload="w=window.open('#'); x=document.getElementById('t'); a='<html>\n'; b='\n</html>'; setTimeout('x.innerHTML=a+w.document.documentElement.innerHTML+b; w.close()',2000)"> 
<textarea id=t></textarea> 
</body> 
</html> 
+0

जब मैक कोशिश करता हूं तो मैक पर सफारी में काम नहीं करता है। – Quentin

+0

मैं सफारी 5.0.6 का उपयोग वेबकिट पैच के साथ इसे हाल के संस्करणों के बराबर अपडेट करने के लिए करता हूं। सफारी के किस संस्करण का आपने उपयोग किया और क्या हुआ? –

+0

8.0.3। कुछ त्रुटियों के अलावा कुछ भी नहीं हुआ (जिसे मैंने याद नहीं किया) कंसोल में दिखाई दिया। – Quentin

3

मैंने ImportIO का उपयोग किया। यदि आप उनके साथ खाता खोलते हैं (जो मुफ़्त है) तो वे आपको किसी भी वेबसाइट से HTML से अनुरोध करने देते हैं। वे आपको प्रति वर्ष 50k अनुरोध करने देते हैं। मैंने उन्हें एक विकल्प खोजने के लिए समय नहीं लिया, लेकिन मुझे यकीन है कि कुछ हैं।

var request = new XMLHttpRequest(); 
 

 
request.onreadystatechange = function() { 
 
    jsontext = request.responseText; 
 

 
    alert(jsontext); 
 
} 
 

 
request.open("GET", "https://extraction.import.io/query/extractor/THE_PUBLIC_LINK_THEY_GIVE_YOU?_apikey=YOUR_KEY&url=YOUR_URL", true); 
 

 
request.send();

Sidenote::

अपने जावास्क्रिप्ट में, आप मूल रूप से सिर्फ इस तरह एक GET अनुरोध करता हूँ ने शोध करते समय क्या मैं एक ही सवाल था की तरह महसूस मैं इस सवाल का पाया, इसलिए दूसरों को मेरा समाधान सहायक मिल सकता है।

अद्यतन: मैंने एक नया निर्माण किया जिसने मुझे सेवा के लिए भुगतान करने से पहले 48 घंटे से भी कम समय तक उपयोग करने की अनुमति दी। ऐसा लगता है कि अगर आप भुगतान नहीं कर रहे हैं तो उन्होंने आपकी परियोजना को बहुत जल्दी बंद कर दिया है। मैंने नोडजेएस और नाइटमेयरजेएस नामक लाइब्रेरी के साथ अपनी ही इसी तरह की सेवा की। आप उनके ट्यूटोरियल here देख सकते हैं और अपना खुद का वेब स्क्रैपिंग टूल बना सकते हैं। यह अपेक्षाकृत आसान है। मैंने इसे एपीआई के रूप में स्थापित करने की कोशिश नहीं की है कि मैं अनुरोध कर सकता हूं या कुछ भी कर सकता हूं।

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

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