वेबसाइट से डेटा स्क्रैप करने का सबसे अच्छा तरीका क्या है? [बन्द है]


107

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

मुझे Import.io नामक एक उपयोगी तृतीय-पक्ष उपकरण मिला है जो वेब पेजों को स्क्रैप करने और डेटा सेट बनाने के लिए क्लिक और गो कार्यक्षमता प्रदान करता है, केवल एक चीज है जो मैं अपने डेटा को स्थानीय रूप से रखना चाहता हूं और मैं किसी भी सदस्यता योजनाओं की सदस्यता नहीं लेना चाहता हूं ।

वेब पेज को स्क्रैप करने और उनके डेटासेट बनाने के लिए यह कंपनी किस तरह की तकनीक का उपयोग करती है? मैंने पाया कि कुछ वेब स्क्रैपिंग फ्रेमवर्क pjscrape & Scrapy वे इस तरह की सुविधा प्रदान कर सकते हैं


4
PHP निश्चित रूप से सवाल से बाहर नहीं है, यह स्पष्ट रूप से गलत है। gist.github.com/krakjoe/b1526fcc828621e840cb
जो वाटकिंस

@JoeWatkins जो वास्तव में अच्छा लग रहा है, क्या इसे चलाने के लिए एक विशेष PHP कॉन्फ़िगरेशन की आवश्यकता है? और नीचे दिए गए उपकरणों / भाषाओं के साथ प्रदर्शन में प्रदर्शन कैसा है?
0x1ad2

1
इसके लिए PHP, और pthreads के एक थ्रेड सेफ बिल्ड की आवश्यकता है, github.com/krakjoe/pthreads/blob/master/README.md पढ़ें , आप मुझे चैट में ढूंढ सकते हैं यदि आप मदद चाहते हैं, तो मैं या कोई और :) :)
जो वाटकिंस

@ 0x1ad2 यदि आप स्थानीय स्तर पर डेटा रखना चाहते हैं तो आपको वेब APIs के बजाय सॉफ़्टवेयर ( datascraping.co ) आज़माना चाहिए । अधिकांश उपकरण वेबसाइटों से डेटा निकालने के लिए Xpath, CSS चयनकर्ता और REGEX का उपयोग करते हैं और डेटा स्क्रैपिंग स्टूडियो इन सभी 3 सुविधाओं का समर्थन करते हैं।
विकाश राठी

इसके दो तरीके हैं, एक है फ्री / ओपन सोर्स लाइब्रेरियों का इस्तेमाल करके अपना रोल आउट करना। तुम सचमुच का उपयोग कर किसी भी साइट के लिए एक ajax वेब क्रॉलर उत्पन्न कर सकते हैं scrape.it यह एक भुगतान किया उपकरण है, लेकिन यह काम किया जब import.io या कीमोनो की तरह न मुफ़्त उपकरण प्रदान कर सकता है।
मैं प्यार करता हूँ

जवाबों:


271

आप निश्चित रूप से एक अच्छा वेब स्क्रैपिंग फ्रेमवर्क के साथ शुरुआत करना चाहेंगे। बाद में आप यह तय कर सकते हैं कि वे बहुत सीमित हैं और आप पुस्तकालयों के अपने ढेर को एक साथ रख सकते हैं, लेकिन बहुत अधिक स्क्रैपिंग अनुभव के बिना आपका डिज़ाइन pjscrape या स्क्रैपी से बहुत खराब होगा।

नोट: मैं यहाँ मूल रूप से विनिमेय क्रॉलिंग और स्क्रैपिंग शब्दों का उपयोग करता हूँ। यह आपके Quora प्रश्न के उत्तर की एक प्रति है, यह बहुत लंबा है।

उपकरण

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

आपको एचटीएमएल के साथ-साथ एचटीटीपी के एक अच्छे कामकाजी ज्ञान की आवश्यकता होगी और संभवत: मध्य प्रॉक्सी सॉफ्टवेयर में मनुष्य का एक सभ्य टुकड़ा खोजना चाहेंगे। आपको HTTP अनुरोधों और प्रतिक्रियाओं का निरीक्षण करने और समझने की आवश्यकता होगी कि कुकीज़ और सत्र की जानकारी और क्वेरी पैरामीटर कैसे पास किए जा रहे हैं। Fiddler ( http://www.telerik.com/fiddler ) और चार्ल्स प्रॉक्सी ( http://www.charlesproxy.com/ ) लोकप्रिय उपकरण हैं। मैं mitmproxy ( http://mitmproxy.org/ ) का उपयोग बहुत करता हूं क्योंकि मैं एक माउस लड़के की तुलना में कीबोर्ड आदमी से अधिक हूं।

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

भाषा: हिन्दी

PHP मूल रूप से बाहर है, यह इस कार्य के लिए अच्छी तरह से अनुकूल नहीं है और इस क्षेत्र में लाइब्रेरी / फ्रेमवर्क समर्थन खराब है। पाइथन (स्क्रेपी एक महान प्रारंभिक बिंदु है) और क्लोजर / क्लोजरस्क्रिप्ट (अविश्वसनीय रूप से शक्तिशाली और उत्पादक लेकिन एक बड़ी सीखने की अवस्था) इस समस्या के लिए महान भाषाएं हैं। चूंकि आप एक नई भाषा नहीं सीखेंगे और आप पहले से ही जावास्क्रिप्ट को जानते हैं, मैं निश्चित रूप से जेएस के साथ चिपके रहने का सुझाव दूंगा। मैंने pjscrape का उपयोग नहीं किया है, लेकिन यह उनके डॉक्स के त्वरित पढ़ने से काफी अच्छा लगता है। यह अच्छी तरह से अनुकूल है और नीचे वर्णित समस्या का एक उत्कृष्ट समाधान लागू करता है।

नियमित अभिव्यक्ति पर एक नोट: PARSE HTML के लिए नियमित रूप से पंजीकरण का उपयोग न करें। बहुत से शुरुआती लोग ऐसा करते हैं क्योंकि वे पहले से ही रेगीज़ से परिचित हैं। यह एक बड़ी गलती है, html को नेविगेट करने के लिए xpath या css चयनकर्ताओं का उपयोग करें और केवल एक HTML नोड के अंदर वास्तविक पाठ से डेटा निकालने के लिए नियमित अभिव्यक्ति का उपयोग करें। यह आपके लिए पहले से ही स्पष्ट हो सकता है, अगर आप इसे आजमाते हैं तो यह जल्दी से स्पष्ट हो जाता है लेकिन बहुत से लोग इस सड़क पर किसी कारण से बहुत समय बर्बाद करते हैं। Xpath या css चयनकर्ताओं से डरो मत, वे regexes की तुलना में सीखना आसान हैं और उन्हें इस सटीक समस्या को हल करने के लिए डिज़ाइन किया गया था।

जावास्क्रिप्ट-भारी साइटें

पुराने दिनों में आपको बस एक http अनुरोध करना था और HTML रिपीट को पार्स करना था। अब आपको लगभग उन साइटों से निपटना होगा जो मानक HTML HTTP अनुरोध / प्रतिक्रियाओं का मिश्रण हैं और लक्ष्य साइट के जावास्क्रिप्ट भाग द्वारा किए गए अतुल्यकालिक HTTP कॉल हैं। यह वह जगह है जहाँ आपका प्रॉक्सी सॉफ्टवेयर और फायरबग / डेवटूल का नेटवर्क टैब बहुत काम आता है। इनकी प्रतिक्रियाएं html हो सकती हैं या वे json हो सकती हैं, दुर्लभ मामलों में वे xml या कुछ और होंगी।

इस समस्या के दो दृष्टिकोण हैं:

निम्न स्तर का दृष्टिकोण:

आप यह पता लगा सकते हैं कि अजाक्स साइट जावास्क्रिप्ट को क्या कहता है और उन प्रतिक्रियाओं को कैसा दिखता है और उन्हीं अनुरोधों को स्वयं करता है। तो आप http://example.com/foobar से html को खींच सकते हैं और डेटा का एक टुकड़ा निकाल सकते हैं और फिर http://example.com/api/baz?foo=b से json प्रतिक्रिया खींचनी होगी ... डेटा का दूसरा टुकड़ा प्राप्त करें। आपको सही कुकीज़ या सत्र मापदंडों को पारित करने के बारे में पता होना चाहिए। यह बहुत दुर्लभ है, लेकिन कभी-कभी अजाक्स कॉल के लिए कुछ आवश्यक पैरामीटर साइट की जावास्क्रिप्ट में किए गए कुछ पागल गणना का परिणाम होगा, रिवर्स इंजीनियरिंग यह कष्टप्रद हो सकता है।

एम्बेडेड ब्राउज़र दृष्टिकोण:

आपको यह जानने की आवश्यकता है कि html में कौन सा डेटा है और ajax कॉल से क्या डेटा आता है? उस सत्र और कुकी डेटा को प्रबंधित करना? जब आप किसी साइट को ब्राउज़ करते हैं, तो ब्राउज़र और साइट जावास्क्रिप्ट ऐसा नहीं करते हैं। यह पूरी बात है।

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

अब आपके पास दो विकल्प हैं, इसे समाप्त html को थूकने के लिए प्राप्त करें और इसे पार्स करें या पृष्ठ में कुछ जावास्क्रिप्ट को इंजेक्ट करें जो आपके पार्सिंग और डेटा को स्वरूपित करता है और डेटा को बाहर निकालता है (शायद json प्रारूप में)। आप स्वतंत्र रूप से इन दो विकल्पों को भी मिला सकते हैं।

कौन सा दृष्टिकोण सबसे अच्छा है?

यह निर्भर करता है, आपको सुनिश्चित करने के लिए निम्न स्तर के दृष्टिकोण से परिचित और आरामदायक होने की आवश्यकता होगी। एम्बेडेड ब्राउज़र दृष्टिकोण किसी भी चीज के लिए काम करता है, इसे लागू करना बहुत आसान होगा और स्क्रैपिंग गायब होने में कुछ कठिन समस्याएं पैदा करेगा। यह मशीनरी का काफी जटिल टुकड़ा है जिसे आपको समझने की आवश्यकता होगी। यह केवल HTTP अनुरोध और प्रतिक्रियाएं नहीं है, यह अनुरोध है, एम्बेडेड ब्राउज़र रेंडरिंग, साइट जावास्क्रिप्ट, इंजेक्टेड जावास्क्रिप्ट, आपका अपना कोड और एम्बेडेड ब्राउज़र प्रक्रिया के साथ 2-तरफा इंटरैक्शन।

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

दर सीमा / बॉट व्यवहार

इसके लिए आपको बहुत जागरूक होने की आवश्यकता है। आपको उचित दर पर अपने लक्ष्य डोमेन के लिए अनुरोध करने की आवश्यकता है। आपको वेबसाइटों को क्रॉल करते समय एक अच्छी तरह से व्यवहार किए गए बॉट को लिखने की आवश्यकता है, और इसका मतलब है कि robots.txt का सम्मान करना और अनुरोधों के साथ सर्वर को हथौड़ा नहीं करना है। यहां गलतियां या लापरवाही बहुत ही अनैतिक है क्योंकि इसे सेवा हमले से इनकार किया जा सकता है। स्वीकार्य दर इस आधार पर भिन्न होती है कि आप किससे पूछते हैं, 1req / s वह अधिकतम है जो Google क्रॉलर पर चलता है लेकिन आप Google नहीं हैं और संभवतः Google के रूप में आपका स्वागत नहीं है। इसे यथोचित रूप से धीमा रखें। मैं प्रत्येक पृष्ठ अनुरोध के बीच 2-5 सेकंड का सुझाव दूंगा।

एक उपयोगकर्ता एजेंट स्ट्रिंग के साथ अपने अनुरोधों को पहचानें जो आपके बॉट की पहचान करता है और आपके बॉट के लिए एक वेबपेज है जो यह समझाता है कि यह उद्देश्य है। यह url एजेंट स्ट्रिंग में जाता है।

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

परिक्षण

इकाई / एकीकरण परीक्षण व्यक्ति नहीं? बहुत बुरा। अब आपको एक बनना होगा। साइटें बार-बार बदलती हैं और आप बार-बार अपना कोड बदलते रहेंगे। यह चुनौती का एक बड़ा हिस्सा है।

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

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

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

कानूनी मुद्दे

अगर आप बेवकूफी भरे काम करते हैं तो यहां कानून थोड़ा खतरनाक हो सकता है। यदि कानून शामिल हो जाता है तो आप ऐसे लोगों से निपट रहे हैं जो नियमित रूप से "हैकिंग टूल" के रूप में विग और कर्ल का उल्लेख करते हैं। आप यह नहीं चाहते।

स्थिति की नैतिक वास्तविकता यह है कि url का अनुरोध करने के लिए ब्राउज़र सॉफ़्टवेयर का उपयोग करने और कुछ डेटा को देखने और अपने स्वयं के सॉफ़्टवेयर का उपयोग करके url का अनुरोध करने और कुछ डेटा को देखने के बीच कोई अंतर नहीं है। Google दुनिया की सबसे बड़ी स्क्रैपिंग कंपनी है और उन्हें इसके लिए प्यार किया जाता है। उपयोगकर्ता एजेंट में अपने बॉट्स नाम की पहचान करना और अपने वेब क्रॉलर के लक्ष्यों और इरादों के बारे में खुला रहना यहां मदद करेगा क्योंकि कानून समझता है कि Google क्या है। यदि आप कुछ भी छायादार कर रहे हैं, जैसे कि नकली उपयोगकर्ता खाते बनाना या साइट के उन क्षेत्रों तक पहुंच बनाना जो आपको (या तो रोबॉट्स.नेट द्वारा "अवरुद्ध" नहीं होना चाहिए या किसी प्रकार के प्राधिकरण शोषण के कारण) तो ध्यान रखें कि आप कुछ अनैतिक कर रहे हैं और कानून की तकनीक की अज्ञानता यहां असाधारण रूप से खतरनाक होगी। यह एक हास्यास्पद स्थिति है, लेकिन यह एक वास्तविक है।

एक उत्कृष्ट नागरिक के रूप में ऊपर और ऊपर एक नए खोज इंजन का प्रयास करना और उसका निर्माण करना वस्तुतः संभव है, गलती करना या आपके सॉफ़्टवेयर में बग होना और हैकर के रूप में देखा जाना। ऐसा कुछ नहीं जो आप वर्तमान राजनीतिक वास्तविकता पर विचार करना चाहते हैं।

मैं वैसे भी पाठ की इस विशाल दीवार को लिखने वाला कौन हूं?

मैंने अपने जीवन में बहुत सारे वेब क्रॉलिंग संबंधित कोड लिखे हैं। मैं एक दशक से अधिक समय से सलाहकार, कर्मचारी और स्टार्टअप संस्थापक के रूप में वेब से संबंधित सॉफ्टवेयर विकास कर रहा हूं। शुरुआती दिन पर्ल क्रॉलर / स्क्रैपर्स और php वेबसाइट लिख रहे थे। जब हम जेसी जेम्स ग्राट्ट ने इसे अजाक्स नाम देने से पहले वेबपेजों में सीएसवी डेटा लोड करने के लिए छिपे हुए iframes को एम्बेड कर रहे थे, तो XMLHTTPRequest से पहले एक विचार था। JQuery से पहले, json से पहले। मैं अपने 30 के दशक के मध्य में हूं, जो इस व्यवसाय के लिए स्पष्ट रूप से प्राचीन माना जाता है।

मैंने बड़े पैमाने पर क्रॉलिंग / स्क्रैपिंग सिस्टम दो बार लिखा है, एक बार एक बड़ी कंपनी के लिए एक मीडिया कंपनी (पर्ल में) और हाल ही में एक छोटी टीम के लिए सर्च इंजन स्टार्टअप के सीटीओ (पायथन / जावास्क्रिप्ट में) के रूप में। मैं वर्तमान में एक सलाहकार के रूप में काम करता हूं, ज्यादातर क्लोजर / क्लोजरस्क्रिप्ट (सामान्य रूप से एक अद्भुत विशेषज्ञ भाषा में कोडिंग है और इसमें लाइब्रेरी हैं जो क्रॉलर / स्क्रैपर की समस्याओं को एक सुखद बनाते हैं)

मैंने सफल एंटी-क्रॉलिंग सॉफ्टवेयर सिस्टम भी लिखा है। यदि आप चाहते हैं या आपको पसंद न आने वाले बॉट्स को पहचानना या तोड़ना चाहते हैं, तो यह गैर-अयोग्य साइटों को लिखना आसान है।

मुझे किसी अन्य प्रकार के सॉफ़्टवेयर से अधिक क्रॉलर, स्क्रैपर्स और पार्सर लिखना पसंद है। यह चुनौतीपूर्ण है, मज़ेदार है और इसका इस्तेमाल अद्भुत चीजें बनाने के लिए किया जा सकता है।


4
मैं PHP के बारे में बुरा विकल्प होने के बारे में आपसे सहमत था, लेकिन सही पुस्तकालयों के साथ यह बहुत बुरा नहीं है। रेगेक्स और एरे / स्टिंग हेरफेर अनाड़ी है लेकिन दूसरी तरफ यह तेज और हर जगह है।
पगडियारियो

3
ऐसे माहौल में जहां कुछ पुस्तकालय हैं जो इसे एक खुशी और बहुत कुछ बनाते हैं जो इसे काफी सरल और काफी आसान बनाते हैं ... आप "बहुत बुरा नहीं" के लिए क्यों व्यवस्थित होंगे। मैं सहमत हूं, यह PHP (और FORTRAN, C, VB, आदि) में उल्लेखनीय है, लेकिन जब तक आपकी समस्या वास्तव में सरल नहीं है, तब तक नौकरी के लिए सही टूल का उपयोग करना बेहतर होगा। और फिर, जब तक कि आपको हल करने के लिए एक अविश्वसनीय रूप से सरल समस्या न हो ... क्या फर्क पड़ता है कि रेगेक्स हर जगह है? लगभग हर स्क्रैपिंग समस्या की तुलना में लाइब्रेरी स्थापित करना बहुत सरल है। और वास्तव में, रेगेक्स अक्सर इस समस्या के लिए काफी धीमा है।
जेसी शेरलॉक

5
आप सही हो सकते हैं, लेकिन मैं एक तथ्य के लिए जानता हूं कि मैं इसे आसानी से PHP में नहीं कर सकता। इससे पहले कि मैं PHP से दूर चला गया मैं पेशेवर PHP अनुभव के एक दशक के करीब था। मैंने पाइथन में स्केल पर एक स्क्रैपिंग सिस्टम बनाने में एक साल से अधिक का समय बिताया है, और मैं कुछ अच्छे पुस्तकालयों के बिना ऐसा करने की कल्पना नहीं कर सकता हूं जो पीएचपी में उपलब्ध नहीं हैं या पायथन में उपलब्ध संक्षिप्त मेटा-प्रोग्रामिंग तकनीकों के बिना कर रहे हैं। । यही कारण है कि मैं और भी शक्तिशाली मेटा-प्रोग्रामिंग क्षमताओं को प्राप्त करने के लिए क्लूजुर में चला गया।
जेसी शरलॉक

4
Enlive, प्रोजेक्ट विशिष्ट कोड के लिए क्लोजर की शक्ति के साथ, सबसे बड़े विजेता हैं। स्कीमा एक महान सत्यापन पुस्तकालय है, जो सूचना निष्कर्षण कोड का इतना बड़ा हिस्सा है। मैं वर्तमान में जावा दुनिया के साथ महतो के साथ-साथ नैशोर्न / राइनो जैसे कुछ प्रकार के निष्पादन के लिए आसान अंतर के साथ वास्तव में खुश हूं। और क्लॉजुर लोग ऐसे प्रकार हैं जो इस github.com/shriphani/subotai जैसे लिबास लिखते हैं ताकि आपको न करना पड़े। ... अगली टिप्पणी में जारी ...
जेसी शर्लक

3
मैंने यह भी पाया है कि जब आपको वास्तव में एक वास्तविक ब्राउज़र की आवश्यकता होती है और उसे ploomjs / casperjs के साथ जाने की आवश्यकता होती है, तो क्लोजरस्क्रिप्ट का उपयोग करना वास्तव में बहुत अच्छा होता है (क्लजेक्स का उपयोग करते हुए clj और cljs के बीच अक्सर कोड साझा किया जाता है) आप क्लोजरस्क्रिप्ट के बजाय पेज में इंजेक्ट करने के लिए लिखें । Core.async सर्वर पर अत्यधिक समवर्ती क्रॉलिंग कोड के समन्वय के लिए बहुत अच्छा है और साथ ही js वातावरण के अंदर कॉलबैक नरक से बाहर निकल रहा है (phantomjs के अंदर core.async cljs कोड के साथ ब्राउज़र स्वचालन का समन्वय विकल्पों की तुलना में स्वर्ग है)।
जेसी शरलॉक

21

हाँ आप इसे स्वयं कर सकते हैं। यह पृष्ठ के स्रोतों को हथियाने और उन्हें जिस तरह से आप चाहते हैं, उन्हें पार्स करने का मामला है।

विभिन्न संभावनाएं हैं। एक अच्छा कॉम्बो उपयोग कर रहा है अजगर-अनुरोध (urllib2 के शीर्ष पर बनाया गया है, यह है urllib.requestpython3 में) और BeautifulSoup4 है, जो अपने तरीकों तत्वों का चयन करने के है और यह भी परमिट CSS चयनकर्ताओं :

import requests
from BeautifulSoup4 import BeautifulSoup as bs
request = requests.get("http://foo.bar")
soup = bs(request.text) 
some_elements = soup.find_all("div", class_="myCssClass")

कुछ लोग xpath पार्सिंग या jquery की तरह pyquery, lxml या कुछ और पसंद करेंगे ।

जब आप जो डेटा चाहते हैं वह कुछ जावास्क्रिप्ट द्वारा निर्मित होता है , तो ऊपर काम नहीं करेगा। आपको या तो अजगर-भूत या सेलेनियम की आवश्यकता है। मैं PhantomJS के साथ संयुक्त पसंद करता हूं , बहुत हल्का और सरल स्थापित करने के लिए, और उपयोग करने में आसान:

from selenium import webdriver
client = webdriver.PhantomJS()
client.get("http://foo")
soup = bs(client.page_source)

मैं आपको अपना समाधान शुरू करने की सलाह दूंगा। आप समझेंगे कि स्क्रेपी के लाभ ऐसा कर रहे हैं।

ps: स्क्रैपली पर एक नज़र डालें: https://github.com/scrapy/scrapely

pps: पोर्टिया पर एक नज़र डालें, जानकारी को बिना प्रोग्रामिंग ज्ञान के निकालने के लिए: https://github.com/scrapinghub/portia


Awser के लिए ठीक है धन्यवाद, एकमात्र समस्या यह है कि पायथन मेरे कौशल-सेट में नहीं है। क्या अन्य अच्छी प्रोग्रामिंग भाषाएँ हैं जो समान कार्य कर सकती हैं? मैं मुख्य रूप से PHP और जावास्क्रिप्ट के साथ काम करता हूं।
0x1ad2

भ्रम के लिए खेद है (मैंने अपने प्रश्न में पायथन ढांचे का उल्लेख किया है), लेकिन अगर पायथन इसे करने का सबसे अच्छा तरीका है तो मैं इसे सीख सकता था।
0x1ad2

अजगर बहुत आसान बनाता है। इसे सीखना भी आसान है। सबसे अच्छा खुरचनी इस समय अच्छा प्रदर्शन करती है। उनके पास बहुत अच्छे दस्तावेज भी हैं।
अभिषेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.