Fazla bilgi paylaşabilecek çeşitli web sitelerini taramak için Scrapy kullanıyorum.Scrapy - Bir öğenin sessizce bırakılması
Kazıdığım her sayfa için, sayfanın URL'sini, başlığını ve html kodunu mongoDB'ye depolarım. Veritabanında çoğaltmayı önlemek istiyorum, böylece benzer bir öğenin zaten depolanmış olup olmadığını kontrol etmek için bir boru hattı uyguluyorum. Böyle bir durumda, DropItem
istisnasını yükseltirim.
Sorunum, bir öğeyi DropItem
istisnasına göre her ne zaman düşürdüğüm, Scrapy öğenin tüm içeriğini günlüğe (stdout veya dosya) gösterecektir. Her bir alıntılanan sayfanın tüm HTML kodunu ayıklarken, bir damla durumunda, HTML kodunun tamamı günlüğe görüntülenecektir.
İçeriği olmadan bir öğeyi sessizce nasıl bırakabilirim?
Zaman ayırdığınız için teşekkür ederiz!
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
bu nereye gidiyor? Ara katman? Boru hatları? – Xodarap777
@ Xodarap777, bence middlewares.py dosyası daha uygun. Ya da "logformatter.py" gibi yeni bir dosya oluşturabilirsiniz. Bu cevabın kodu, örümcek ile dosyaya kod koymayı teklif ediyor. ** Not **: Bu kod kullanımdan kaldırılmıştır, ancak aşağıdaki @mirosval'ın cevabı güncellenmiş çalışma sürümüne sahiptir. – kupgov