2015-12-07 9 views
0

Я начинаю с Scrapy, чтобы автоматизировать загрузку файлов с веб-сайтов. В качестве теста я хочу загрузить файлы jpg с сайта this. Мой код основан на the intro tutorial и Files and Images Pipeline tutorial на веб-сайте Scrapy.Не удается загрузить изображения с веб-сайта с помощью scrapy

Мой код заключается в следующем:

В settings.py, я добавил эти строки:

ITEM_PIPELINES = {'scrapy.pipelines.images.ImagesPipeline': 1} 

IMAGES_STORE = '/home/lucho/Scrapy/jpg/' 

Мой items.py файл является:

import scrapy 

class JpgItem(scrapy.Item): 
    image_urls = scrapy.Field() 
    images = scrapy.Field() 
    pass 

Мой файл трубопровода:

import scrapy 
from scrapy.pipelines.images import ImagesPipeline 
from scrapy.exceptions import DropItem 

class JpgPipeline(object): 
    def process_item(self, item, spider): 
     return item 
    def get_media_requests(self, item, info): 
     for image_url in item['image_urls']: 
      yield scrapy.Request(image_url) 

    def item_completed(self, results, item, info): 
     image_paths = [x['path'] for ok, x in results if ok] 
     if not image_paths: 
      raise DropItem("Item contains no images") 
     item['image_paths'] = image_paths 
     return item 

И наконец, мой Файл паук:

import scrapy 
from .. items import JpgItem 

class JpgSpider(scrapy.Spider): 
    name = "jpg" 
    allowed_domains = ["http://www.kevinsmedia.com"] 
    start_urls = [ 
     "http://www.kevinsmedia.com/km/mp3z/Fluke/Risotto/" 
    ] 

def init_request(self): 
    #"""This function is called before crawling starts.""" 
    return Request(url=self.login_page, callback=self.parse) 

def parse(self, response): 
    item = JpgItem() 
    return item 

(В идеале, я хочу, чтобы загрузить все JPG, без указания точного адреса веб-сайтов для каждого файла, необходимого)

Выход "Scrapy ползания JPG" является:

2015-12-08 19:19:30 [scrapy] INFO: Scrapy 1.0.3.post6+g2d688cd started (bot: jpg) 
2015-12-08 19:19:30 [scrapy] INFO: Optional features available: ssl, http11 
2015-12-08 19:19:30 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'jpg.spiders', 'SPIDER_MODULES': ['jpg.spiders'], 'COOKIES_ENABLED': False, 'DOWNLOAD_DELAY': 3, 'BOT_NAME': 'jpg'} 
2015-12-08 19:19:30 [scrapy] INFO: Enabled extensions: CloseSpider, TelnetConsole, LogStats, CoreStats, SpiderState 
2015-12-08 19:19:30 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, ChunkedTransferMiddleware, DownloaderStats 
2015-12-08 19:19:30 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware 
2015-12-08 19:19:30 [scrapy] INFO: Enabled item pipelines: ImagesPipeline 
2015-12-08 19:19:30 [scrapy] INFO: Spider opened 
2015-12-08 19:19:30 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2015-12-08 19:19:30 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023 
2015-12-08 19:19:31 [scrapy] DEBUG: Crawled (200) <GET http://www.kevinsmedia.com/km/mp3z/Fluke/Risotto/> (referer: None) 
2015-12-08 19:19:31 [scrapy] DEBUG: Scraped from <200 http://www.kevinsmedia.com/km/mp3z/Fluke/Risotto/> 
{'images': []} 
2015-12-08 19:19:31 [scrapy] INFO: Closing spider (finished) 
2015-12-08 19:19:31 [scrapy] INFO: Dumping Scrapy stats: 
{'downloader/request_bytes': 254, 
'downloader/request_count': 1, 
'downloader/request_method_count/GET': 1, 
'downloader/response_bytes': 2975, 
'downloader/response_count': 1, 
'downloader/response_status_count/200': 1, 
'finish_reason': 'finished', 
'finish_time': datetime.datetime(2015, 12, 8, 22, 19, 31, 294139), 
'item_scraped_count': 1, 
'log_count/DEBUG': 3, 
'log_count/INFO': 7, 
'response_received_count': 1, 
'scheduler/dequeued': 1, 
'scheduler/dequeued/memory': 1, 
'scheduler/enqueued': 1, 
'scheduler/enqueued/memory': 1, 
'start_time': datetime.datetime(2015, 12, 8, 22, 19, 30, 619918)} 
2015-12-08 19:19:31 [scrapy] INFO: Spider closed (finished) 

Хотя, кажется, нет ошибки, программа не извлекает файлы jpg. В случае, если это имеет значение, я использую Ubuntu.

ответ

0

Вы не определили parse() в своем классе JpgSpider.

Обновление. Это не похоже на проблему, с которой вы должны атаковать с помощью scrapy, теперь, когда я вижу URL-адрес в вашем обновлении. WGET может быть более уместным, посмотрите на answers here. В частности, посмотрите первый комментарий к верхнему ответу, чтобы узнать, как использовать расширение файла, чтобы ограничить файлы, которые вы загружаете (-A jpg).

Update 2: Синтаксический анализ() рутина может получить альбом искусства ссылки из <a> тега с помощью этого кода

part_urls = response.xpath('//a[contains(., "AlbumArt")]/@href') 

Это возвращает список частных адресов, вам нужно будет добавить корневой URL для страница, которую вы анализируете от response.url. В URL-адресах, на которые я смотрел, есть несколько% кодов, они могут быть проблемой, но попробовать все равно. Если у вас есть список полных адресов, поместить их в пункт []

item['image_urls'] = full_urls 
yield item 

Это должно получить SCRAPY автоматически загружать изображения, так что вы можете удалить промежуточное программное обеспечение и пусть SCRAPY делать тяжелую работу.

+0

Но что я должен определить? Я пробовал несколько кодов, но ничего не работает. – luchonacho

+0

По какой-то другой причине я хочу использовать Scrapy для выполнения этой задачи. Согласно веб-сайту, это должно быть возможно. – luchonacho

+0

Обновлен раздел parse(). – luchonacho

 Смежные вопросы

  • Нет связанных вопросов^_^