2016-07-26 20 views
2

Folgendes: scrapy's Tutorial Ich machte einen einfachen Bild-Crawler (scrapes Bilder von Bugattis). Das wird unten in BEISPIEL veranschaulicht.Scrapy: Bilder Pipeline, Bilder herunterladen

Allerdings hat mich der Leitfaden mit einem nicht funktionierenden Crawler verlassen! Es findet alle URLs, aber es lädt die Bilder nicht herunter.

Ich fand eine Entenbandlösung: ersetzen ITEM_PIPELINES und IMAGES_STORE so, dass;

ITEM_PIPELINES['scrapy.pipeline.images.FilesPipeline'] = 1 und

IMAGES_STORE ->FILES_STORE

Aber ich weiß nicht, warum funktioniert das? Ich möchte die ImagePipeline wie von scrapy dokumentiert verwenden.

BEISPIEL

settings.py

BOT_NAME = 'imagespider' 
SPIDER_MODULES = ['imagespider.spiders'] 
NEWSPIDER_MODULE = 'imagespider.spiders' 
ITEM_PIPELINES = { 
    'scrapy.pipelines.images.ImagesPipeline': 1, 
} 
IMAGES_STORE = "/home/user/Desktop/imagespider/output" 

items.py

import scrapy 

class ImageItem(scrapy.Item): 
    file_urls = scrapy.Field() 
    files = scrapy.Field() 

imagespider.py

Antwort

5

Das Element, das Ihre Spinne zurückgibt, muss die Felder "file_urls" für Dateien und/oder "image_urls" für Bilder enthalten. In Ihrem Code geben Sie Einstellungen für die Image-Pipeline an, aber Ihre Return-URLs in "file_urls".

einfach diese Zeile:

yield ImageItem(file_urls=[img_url]) 
# to 
yield {'image_urls': [img_url]} 

* scrapy kann anstelle von Artikel Wörterbuch Objekte zurück, die Zeit spart, wenn Sie nur ein oder zwei Felder haben.

+1

Danke! Sie könnten auch 'ImageItem' ändern, um' image_urls' und 'imageItem (image_urls = [img_url])' 'zu erhalten –

Verwandte Themen