Semalt बाट ट्यूटोरियल: पाइथनमा वेब स्क्र्यापिंग

मैले भर्खर किनोपोइस्क (आईएमडीबीको रूसी संस्करण) भ्रमण गरें र पत्ता लगाए कि वर्षौंको दौडान मैले १००० भन्दा बढी चलचित्रहरू मूल्या rate्कन गर्न सकें। मैले सोचे कि यी डाटालाई अझ विस्तृत रूपमा अनुसन्धान गर्न चाखलाग्दो हुनेछ: के मेरो चलचित्रको स्वाद समयको साथ परिवर्तन भएको छ? वर्षको कुन मौसममा म अधिक चलचित्रहरू हेर्छु?

तर हामी सुन्दर ग्राफिक्स विश्लेषण र निर्माण गर्नु अघि, हामीले डाटा प्राप्त गर्नु पर्छ। दुर्भाग्यवस, धेरै सेवाहरूको सार्वजनिक एपीआई छैन, त्यसैले तपाईं आफ्नो आस्तीन को रोल अप र HTML पृष्ठहरू पार्स गर्न पर्छ।

यो लेख उनीहरूको लागि हो जुन जहिले पनि वेब स्क्र्यापि use कसरी प्रयोग गर्ने भनेर जान्न चाहन्थे तर यसमा उनीहरूको हात लागेन वा कहाँबाट सुरू गर्ने थाहा थिएन।

कार्य

हाम्रो कार्य भनेको पहिले नै हेरिएको फिल्महरूको बारेमा डाटा निकाल्नु हो: फिल्मको शीर्षक, मिति र हेराईको समय, प्रयोगकर्ताको रेटिंग।

वास्तवमा, हाम्रो काम २ चरणमा भइरहेको छ:

चरण १: HTML पृष्ठहरू डाउनलोड र बचत गर्नुहोस्

चरण २: थप विश्लेषणका लागि उपयुक्त ढाँचामा html पार्स गर्नुहोस् (csv, json, pandas डाटाफ्रेम आदि)।

उपकरणहरू

त्यहाँ धेरै अजगर-पुस्तकालयहरू छन् http-अनुरोधहरू पठाउनका लागि। सब भन्दा प्रख्यात र धेरै सजिलो एक अनुरोध हो।

HTML पार्सिंगका लागि लाइब्रेरी छनौट गर्न पनि आवश्यक छ।

BeatifulSoup, lxml

यी दुई सबैभन्दा लोकप्रिय लाइब्रेरी हो html पार्स गर्न को लागी र ती मध्ये एक छनौट मात्र एक व्यक्तिगत प्राथमिकता हो। यसका अतिरिक्त यी लाइब्रेरीहरू एक अर्कासँग नजिकबाट जोडिएका छन्: ब्यूटीफुलसूपले एक्सेलेरेसनको लागि lxML लाई आन्तरिक पार्सरको रूपमा प्रयोग गर्न शुरू गर्‍यो, र lxML मा, एक सूपपर्सन मोड्युल थप गरियो। दृष्टिकोणहरू तुलना गर्न, म डाटा लाई पार्सल गर्छु ब्यूटीफुलसपको साथ र XPath चयनकर्ताहरूको प्रयोग गरेर मोड्युल lxML.html।

डाटा डाउनलोड गर्दै

डाटा डाउनलोड गर्न सुरु गरौं। सर्वप्रथम, बस url द्वारा पृष्ठ प्राप्त गर्न प्रयास गरौं र यसलाई स्थानीय फाईलमा बचत गर्नुहोस्।

हामी नतिजा फाईल खोल्छौं र हेर्छौं कि यो त्यति सरल छैन: साइटले हामीलाई रोबोटको रूपमा लिन्छ र डाटा देखाउँदैन।

साइट कसरी काम गर्छ भनेर पत्ता लगाऔं

ब्राउजरलाई साइटबाट जानकारी प्राप्त गर्नमा कुनै समस्या छैन। हेरौं कसरी यसले वास्तवमा अनुरोध पठाउँदछ। यसको लागि हामी ब्राउजरमा "विकासकर्ता उपकरणहरू" मा "नेटवर्क" प्यानल प्रयोग गर्दछौं (म यसको लागि फायरबग प्रयोग गर्दछु), प्राय: जसो अनुरोध हामीलाई चाहिन्छ सब भन्दा लामो हो।

हामी देख्न सक्छौं, ब्राउजर हेडर्स यूजरएजेन्ट, कुकी र प्यारामिटरको अर्को नम्बरमा पनि पठाउँदछ। पहिले, हामी हेडरमा सही यूजरएजेन्ट पठाउन प्रयास गर्दछौं।

यस पटक हामी सफल छौं, र अब हामीलाई आवश्यक डाटा दिइन्छ। यो ध्यान देने योग्य छ कि कहिलेकाँही साइटले कुकीको वैधता पनि जाँच गर्दछ, जहाँ केस लाइब्रेरीमा सत्र सत्रले मद्दत गर्दछ।

सबै दरहरू डाउनलोड गर्नुहोस्

अब हामी दरको साथ एक पृष्ठ बचत गर्न सक्षम छौं। तर सामान्यतया प्रयोगकर्तासँग धेरै दरहरू हुन्छन्, र सबै पृष्ठहरू मार्फत यसलाई दोहोर्याउन आवश्यक छ। पृष्ठ रूचि जुन हामीलाई चासो छ युआरएलमा सीधा स्थानान्तरण गर्न सजिलो छ।

Html बाट डाटा सing्कलन गर्दै

अब html बाट डाटा स collecting्कलनमा सिधा आउनुहोस्। ब्राउजरमा "एलिमेन्ट निरीक्षण गर्नुहोस्" प्रकार्य प्रयोग गरेर HTML पृष्ठको संरचना कसरी हुन्छ भन्ने बुझ्न सब भन्दा सजिलो तरीका हो। यस अवस्थामा, सबै कुरा एकदम सजिलो छ: दरहरू सहित सम्पूर्ण तालिका ट्यागमा हुन्छ। यो नोड चयन गर्नुहोस्:

बीएस import आयात सुन्दरसूपबाट

lxML html आयात गर्नुहोस्

# सुन्दर सूप

सूप = ब्युल्यसूप (पाठ)

फिल्म_लिस्ट = soup.find ('div', ('वर्ग': 'प्रोफाइलफिलमलिस्ट'))

# lxML

ट्री = html.fromstring (पाठ)

फिल्म_लिस्ट_एलएक्सएमएल = ट्री एक्सप्याथ ('// Div [@class =' 'प्रोफाइलफिलमलिस्ट' ']') '[०]

चलचित्रको रूसी शीर्षक र फिल्मको पृष्ठमा लिंक कसरी निकाल्ने (पाठ कसरी र विशेषताको मान कसरी प्राप्त गर्ने) पनि सिक्न सक्छौं।

यदि तपाईलाई अंग्रेजीमा शीर्षक निकाल्न आवश्यक छ भने मात्र "nameRus" लाई "nameEng" मा परिवर्तन गर्नुहोस्।

परिणामहरू

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