सेलेनियम डब्ल्यूडी पर मानव पार्सर



शुरुआत


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

समस्या का बयान


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

पार्सर


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

तैयारी का काम


और इसलिए हमें स्थापित करने की आवश्यकता है:

अगला, प्रोजेक्ट फ़ोल्डर में, आपको नोड के लिए कई मॉड्यूल स्थापित करने की आवश्यकता होगी

आपको याद दिलाता हूं कि मॉड्यूल स्थापित करना इस तरह दिखता है:
npm install " " 

अब हमारा सेलेनियम चलाएं
 java -jar "    selenium'" 

और डेटाबेस सर्वर
 mongod --dbpath "    " 


लिखने वाला


स्रोत ने कहा कि उसने कहा - "हाथ से हाथ करने के लिए।" अब क्रियाओं का क्रम:
सभी कुकीज़ साफ़ करें
 browser.deleteAllCookies(); 

एक क्षेत्र चुनें

छवि
यहाँ इस क्षेत्र में हम उस क्षेत्र में प्रवेश करते हैं जो हमें रुचिकर बनाता है। क्षेत्र, अन्य सभी मापदंडों की तरह, वस्तु में वर्णित है, जो नीचे इंगित किया जाएगा। एक क्षेत्र में प्रवेश करना और दबाना निम्नलिखित छद्म कोड द्वारा वर्णित किया जा सकता है:
  //     browser.elementByCss(LOCATOR.cssPath) .then(function(el){ //  return el.type(OPTION.region); }) .then(function(){ //       LOCATOR.className = ''; LOCATOR.cssPath = '.b-searchRegion > ul:nth-child(1) > li:nth-child(1)'; return browser.elementByXPath('//span[contains(text(), "' + OPTION.region + '")]'); }) .then(function(el){ //    el.click(); }); 


अगला, अनुभाग चुनें (मुझे "कार" की आवश्यकता है)

छवि

आप केवल विशिष्ट पाठ वाले लिंक पर क्लिक करके इसका वर्णन कर सकते हैं
 //   browser.waitForVisibleByPartialLinkText(OPTION.category,OPTION.elWait) .then(function(){ //    return browser.elementByPartialLinkText(OPTION.category); }) .then(function(el){ //    el.click(); }) 


अब खोज के लिए पैरामीटर सेट करने का अंतिम भाग "अधिक पैरामीटर" बटन पर क्लिक कर रहा है, मूल्य, रिलीज़ का वर्ष और अन्य पैरामीटर दर्ज करें। यह सब वीडियो में देखा जा सकता है।
जैसा कि आप देख सकते हैं कि तत्व को खोजने के लिए सब कुछ बहुत सरल है, इसके अद्वितीय लोकेटर का पता लगाएं और इसे क्लिक करें, दर्ज करें या इसे अकेला छोड़ दें।
दरअसल, अब आपको डेटा एकत्र करने की आवश्यकता है। "शो" बटन पर क्लिक करें, और डेटा पार्स करें। पाठ प्राप्त करना बहुत सरल लगता है
  //    browser.elementByXPathOrNull(locationXPath) .then(function(el){ if(el) { //  return el.text(); } else{ cb('   - ' + locationXPath); } }) 

डेटा संग्रह के लिए स्टॉप सिग्नल परिणाम पृष्ठ पर "दाईं ओर" इस ​​तरह के नीले तीर की अनुपस्थिति है:
छवि
डेटा एकत्र करने के बाद, हम उनके डेटाबेस को रिकॉर्ड करते हैं। और ब्राउज़र को बंद करें।
वैसे, यहां एक ऑब्जेक्ट है जो कार खोजने के लिए मापदंडों का वर्णन करता है।
 OPTION = { region : ' ',//  category: ' ',//  price : {from : 0 , to : 1800000},// cy : 'RUR',// releaseYear : {from : 2010, to : 2013},//  mileage : {from : 0 , to : 99000 },// mark : ['BMW','', 'Audi','Hyundai'],//  model : ['X1', 'X3', 'X5'],//  carcass : ['', ''],//  transmisson : ['', ''],// motor : [''],//  gear : ['','',' ',' '],// photo : false,//  video : false,//  district : ['',''],//jrheuf area : ['', '', ''],// metro : { lines : ['', ''], //  station : [' .', ' .']//  }, source : [''],//  submitted : ['  '],//   ajaxWaitMilisec : 2000,//  ajax . elWait : 3000//   . }, 


आधार के साथ काम करें


आधार संरचना इस प्रकार है
 MONGODBSCHEMA : { title : String, //   link : {type : String , unique : true},//   price : String,//  location : String,//   phone : String,//   * text : String, //  * images : Array,//  * sms : {type : Boolean, default : false }, //      * email : {type : Boolean, default : false }//     e-mail    } 

* - जिन खेतों का उपयोग करने की योजना बनाई गई थी, वे चिह्नित हैं, लेकिन मैंने उन्हें छोड़ने का फैसला किया। भविष्य में, आपको इसकी आवश्यकता हो सकती है।

ईमेल अलर्ट


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

हम सब कुछ हर एन-मिनट करते हैं


हम इसके लिए क्रोन मॉड्यूल का उपयोग करते हैं। हम हर 20 मिनट में पार्सर शुरू करते हैं, और फिर पत्रों की मेलिंग करते हैं।

वह सब


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

Source: https://habr.com/ru/post/In186496/


All Articles