मैं स्क्रैप के लिए काफी नया हूं, मुझे पता है कि आइटम स्क्रैप किए गए डेटा को पॉप्युलेट करने के लिए उपयोग किए जाते हैं, लेकिन मैं आइटम और आइटम लोडर के बीच अंतर को समझ नहीं सकता। मैंने कुछ उदाहरण कोड पढ़ने की कोशिश की, उन्होंने आइटम लोडर का इस्तेमाल वस्तुओं के बजाय स्टोर करने के लिए किया और मुझे समझ में नहीं आया कि क्यों। स्केपर दस्तावेज मेरे लिए पर्याप्त स्पष्ट नहीं था। जब कोई आइटम लोडर का उपयोग किया जाता है और आइटम पर अतिरिक्त सुविधाएं प्रदान करते हैं, तो क्या कोई भी सरल स्पष्टीकरण (उदाहरण के साथ बेहतर) दे सकता है?स्कैपर में आइटम बनाम आइटम लोडर
उत्तर
मैं वास्तव में डॉक्स में आधिकारिक स्पष्टीकरण की तरह:
आइटम लोडर को आबाद करने के लिए एक सुविधाजनक तंत्र प्रदान आइटम स्क्रैप। यद्यपि आइटम को अपने शब्दकोश-जैसी एपीआई का उपयोग करके पॉप्युलेट किया जा सकता है, फिर भी आइटम लोडर कुछ सामान्य कार्यों को स्वचालित करने से पहले कच्चे निकाले गए डेटा को पार्स करने जैसे कार्यों को स्क्रैपिंग प्रक्रिया से पॉप्युलेट करने के लिए एक अधिक सुविधाजनक API प्रदान करते हैं।
दूसरे शब्दों में, आइटम स्क्रैप किए गए डेटा के कंटेनर प्रदान करते हैं, जबकि आइटम लोडर उस कंटेनर को पॉप्युलेट करने के लिए तंत्र प्रदान करते हैं।
अंतिम अनुच्छेद आपके प्रश्न का उत्तर देना चाहिए।
आइटम लोडर बहुत अच्छे हैं क्योंकि वे आपको बहुत से प्रोसेसिंग शॉर्टकट्स रखने की अनुमति देते हैं और सबकुछ साफ, साफ और समझने योग्य रखने के लिए कोड का एक समूह का पुन: उपयोग करते हैं।
तुलना उदाहरण केस। कहते हैं कि चलो हम इस आइटम को स्क्रैप करना चाहते हैं:
class MyItem(Item):
full_name = Field()
bio = Field()
age = Field()
weight = Field()
height = Field()
मद केवल दृष्टिकोण कुछ इस तरह दिखेगा:
def parse(self, response):
full_name = response.xpath("//div[contains(@class,'name')]/text()").extract()
# i.e. returns ugly ['John\n', '\n\t ', ' Snow']
item['full_name'] = ' '.join(i.strip() for i in full_name if i.strip())
bio = response.xpath("//div[contains(@class,'bio')]/text()").extract()
item['bio'] = ' '.join(i.strip() for i in full_name if i.strip())
age = response.xpath("//div[@class='age']/text()").extract_first(0)
item['age'] = int(age)
weight = response.xpath("//div[@class='weight']/text()").extract_first(0)
item['weight'] = int(age)
height = response.xpath("//div[@class='height']/text()").extract_first(0)
item['height'] = int(age)
return item
बनाम आइटम लोडर दृष्टिकोण:
# define once in items.py
from scrapy.loader.processors import Compose, MapCompose, Join, TakeFirst
clean_text = Compose(MapCompose(lambda v: v.strip()), Join())
to_int = Compose(TakeFirst(), int)
class MyItemLoader(ItemLoader):
default_item_class = MyItem
full_name_out = clean_text
bio_out = clean_text
age_out = to_int
weight_out = to_int
height_out = to_int
# parse as many different places and times as you want
def parse(self, response):
loader = MyItemLoader(selector=response)
loader.add_xpath('full_name', "//div[contains(@class,'name')]/text()")
loader.add_xpath('bio', "//div[contains(@class,'bio')]/text()")
loader.add_xpath('age', "//div[@class='age']/text()")
loader.add_xpath('weight', "//div[@class='weight']/text()")
loader.add_xpath('height', "//div[@class='height']/text()")
return loader.load_item()
आप आइटम देख सकते हैं लोडर इतना साफ और स्केल करने में आसान है। आइए मान लें कि आपके पास 20 और फ़ील्ड हैं जिनमें से एक ही प्रसंस्करण तर्क साझा करते हैं, आइटम लोडर के बिना ऐसा करने के लिए आत्महत्या होगी। आइटम लोडर भयानक हैं और आपको उनका उपयोग करना चाहिए!
- 1. आइटम टेम्पलेट: लिस्टबॉक्स बनाम आइटम नियंत्रण
- 2. प्रोलॉग: एकल आइटम बनाम एकल आइटम सूची
- 3. साइटकोर आइटम: बनाया बनाम आइटम: जोड़ा
- 4. साइटकोर आइटम। आईक्लोन बनाम आइटम। आईएसआईटीमक्लोन
- 5. सूची बॉक्स आइटम आइटम आइटम
- 6. REST URL नामकरण सम्मेलन/आइटम/{आईडी} बनाम/आइटम? Id = {id}
- 7. आइटम टेम्पलेट बनाम कंट्रोल टेम्पलेट
- 8. inspect.getmembers() __dict बनाम __। आइटम() dir बनाम()
- 9. आइटम
- 10. आइटम
- 11. आइटम नियंत्रण आइटम टेम्पलेट बाध्यकारी
- 12. jquery स्वतः पूर्ण आइटम आइटम
- 13. "आइटम सूची" या "आइटम सूची"
- 14. स्कैपर के समवर्ती मॉडल के बारे में
- 15. पायथन: सूची बनाम सूची आइटम पर दक्षता
- 16. पावरहेल - "साफ़-आइटम परिवर्तनीय:" बनाम "निकालें-परिवर्तनीय"
- 17. टीएफएस कार्य आइटम: स्टैक रैंक बनाम प्राथमिकता?
- 18. .unsettings में तैनाती आइटम
- 19. वीएस2005 "नया आइटम जोड़ें ..." संवाद - डिफ़ॉल्ट आइटम
- 20. आइटम के सूचकांक और स्वयं आइटम
- 21. बराबर (आइटम, नल) या आइटम == बातिल
- 22. ActionBar ड्रापडाउन स्पिनर आइटम पहले आइटम
- 23. आइटम पर नियंत्रण समय आइटम स्रोत
- 24. आइटम मान में सरणी से चिह्नित आइटम स्ट्रिंग वर्ण
- 25. किसी आइटम में आइटम के ZIndex को संशोधित करें
- 26. आइटम नियंत्रण में नए आइटम पर फ़ोकस सेट करना
- 27. विजुअल स्टूडियो प्रोजेक्ट आइटम में सबमेनू जोड़ना आइटम नोड
- 28. लेटेक्स में आइटम आइटम के बीच की जगह कैसे बदलें?
- 29. आइटम नियंत्रण में चयनित आइटम को हाइलाइट कैसे करें?
- 30. क्यों मेरे आइटम नियंत्रण आइटम में क्षैतिज लेआउट नहीं है?
आइटम उदाहरण बहुत सारे अनावश्यक चर बनाता है जो इसे बहुत अधिक अव्यवस्थित दिखता है, 'आइटम ["बायो"] = response.xpath ("// div [include (@ class,' bio ')]/text() ") निकालें()' –
कूल सामान। धन्यवाद ! – Airbear
@ पैड्राइक कनिंघम मुझे यहां कोई अनावश्यक चर नहीं दिख रहा है क्योंकि 'बायो' फ़ील्ड को धारीदार और शामिल किया जाना है। आपका उदाहरण केवल मूल्यों की एक सूची डालेगा बिना साफ किए। – Granitosaurus