मैं कई वेबसाइटों को क्रॉल करने के लिए स्केपर का उपयोग कर रहा हूं, जो अनावश्यक जानकारी साझा कर सकता है।स्क्रैप - चुपचाप एक आइटम
प्रत्येक पृष्ठ के लिए मैं स्क्रैप करता हूं, मैं पृष्ठ का यूआरएल, इसका शीर्षक और इसका HTML कोड, mongoDB में संग्रहीत करता हूं। मैं डेटाबेस में डुप्लिकेशन से बचना चाहता हूं, इस प्रकार, मैं यह जांचने के लिए एक पाइपलाइन लागू करता हूं कि कोई भी आइटम पहले से संग्रहीत है या नहीं। ऐसे मामले में, मैं DropItem
अपवाद बढ़ाता हूं।
मेरी समस्या यह है कि जब भी मैं DropItem
अपवाद को एक आइटम छोड़ देता हूं, तो स्केपर आइटम की संपूर्ण सामग्री लॉग (stdout या फ़ाइल) में प्रदर्शित करेगा। चूंकि मैं ड्रॉप के मामले में प्रत्येक स्क्रैप किए गए पृष्ठ के पूरे HTML कोड को निकालने जा रहा हूं, तो संपूर्ण HTML कोड लॉग में प्रदर्शित होगा।
मैं अपनी सामग्री को दिखाए बिना किसी आइटम को चुपचाप कैसे छोड़ सकता हूं?
आपके समय के लिए धन्यवाद!
class DatabaseStorage(object):
""" Pipeline in charge of database storage.
The 'whole' item (with HTML and text) will be stored in mongoDB.
"""
def __init__(self):
self.mongo = MongoConnector().collection
def process_item(self, item, spider):
""" Method in charge of item valdation and processing. """
if item['html'] and item['title'] and item['url']:
# insert item in mongo if not already present
if self.mongo.find_one({'title': item['title']}):
raise DropItem('Item already in db')
else:
self.mongo.insert(dict(item))
log.msg("Item %s scraped" % item['title'],
level=log.INFO, spider=spider)
else:
raise DropItem('Missing information on item %s' % (
'scraped from ' + item.get('url')
or item.get('title')))
return item
यह कहां जाता है? Middlewares? पाइपलाइन? – Xodarap777
@ Xodarap777, मुझे लगता है कि 'middlewares.py' फ़ाइल अधिक उपयुक्त है। या आप 'logformatter.py' जैसी नई फ़ाइल बना सकते हैं। इस उत्तर से कोड स्पाइडर के साथ फ़ाइल में कोड डालने की पेशकश करता है। ** नोट **: यह कोड बहिष्कृत है, लेकिन नीचे @mirosval के उत्तर ने वर्किंग वर्जन अपडेट किया है। – kupgov