Vinnaren i pepparkakshustävlingen!
2015-10-21, 19:49
  #1
Medlem
Upn0rths avatar
Hallå. Har gjort en webcrawler för skojs skull för att hämta hem diverse bilder från hemsidor. Har dock problem med att spara filerna på datorn.

settings.py

Kod:
BOT_NAME = 'img'

SPIDER_MODULES = ['img.spiders']
NEWSPIDER_MODULE = 'img.spiders'
ITEM_PIPELINES = {'scrapy.pipelines.images.ImagesPipeline': 1}
IMAGES_STORE = 'C:\Users\123\Desktop\images'

items.py

Kod:
from scrapy.item import Item, Field

class ImageItem(Item):    
    
    images = Field()
    image_urls = Field()

image_spider.py

Kod:
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.loader import XPathItemLoader
from scrapy.http.request import Request
from scrapy.item import Item
from img.items import ImageItem


class ImageSpider(CrawlSpider):
    name = 'image-spider'
    allowed_domains = ['tumblr.com']
    start_urls = ['http://lovedota2.tumblr.com/']
    rules = (
        Rule(SgmlLinkExtractor(allow=(".",)), callback='parse_item', follow=True),        
    )
    
    def parse_item(self, response):                                            
        loader = XPathItemLoader(item = ImageItem(), response = response)
        loader.add_xpath('image_urls', '//img/@src')   
        
        return loader.load_item()

Hittar inga errors i loggen. Men eftersom jag får fram t.ex:
Kod:
 {'checksum': '359dae08f03c9db54bea04e7f01eadf4',
             'path': 'full/9fde70cda0df1e4893e0aa0f9946ac1f6aaa1cf3.jpg',
             'url': 'http://41.media.tumblr.com/ba25586708b94a5ceb29180cd0ce8fb6/tumblr_mg81giC9ky1rt2j9do1_500.jpg'},

Så verkar det rulla på som det ska. Förutom att jag dom inte sparas på korrekt sätt.

Några idéer?
Citera
2015-11-28, 15:00
  #2
Medlem
Jag har inte använt scrapy för att spara bilder men jag är rätt säker på att du måste definiera IMAGES_STORE = '/path/to/valid/dir' (inte 'path\to\valid\dir') eftersom att man alltid i python definierar sökvägar med / och inte \
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback