2012-01-07 36 views
7

Tôi đang bắt đầu với sự cố, và tôi có vấn đề thực sự đầu tiên. Nó đang tải hình ảnh. Đây là con nhện của tôi.Tải xuống hình ảnh có hình thu nhỏ

from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.selector import HtmlXPathSelector 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from example.items import ProductItem 
from scrapy.utils.response import get_base_url 

import re 

class ProductSpider(CrawlSpider): 
    name = "product" 
    allowed_domains = ["domain.com"] 
    start_urls = [ 
      "http://www.domain.com/category/supplies/accessories.do" 
    ] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     items = [] 
     sites = hxs.select('//td[@class="thumbtext"]') 
     number = 0 
     for site in sites: 
      item = ProductItem() 
      xpath = '//div[@class="thumb"]/img/@src' 
      item['image_urls'] = site.select(xpath).extract()[number] 
      item['image_urls'] = 'http://www.domain.com' + item['image_urls'] 
      items.append(item) 
      number = number + 1 
     return items 

Khi tôi trích dẫn ITEM_PIPELINESIMAGES_STORE trong settings.py cách này tôi nhận được URL thích hợp cho hình ảnh Tôi muốn tải về (bản sao dán nó vào trình duyệt để kiểm tra).

Nhưng khi tôi unquote những người tôi bị lỗi sau:

raise ValueError('Missing scheme in request url: %s' % self._url') 
exceptions.ValueError: Missing scheme in request url:h 

và tôi không thể tải hình ảnh của tôi.

Tôi đã tìm kiếm cả ngày và không tìm thấy gì hữu ích.

+0

bạn có một đường ống dẫn để xử lý các url? bạn đã đăng ký đường dẫn của mình trong settings.py chưa? http://doc.scrapy.org/en/latest/topics/images.html, là tài liệu tham khảo tuyệt vời. bạn có quyền thích hợp để ghi vào đường dẫn IMAGE_STORE không? – dm03514

+0

vâng tôi đã làm mọi thứ như đã nói, thực sự tôi đã sử dụng tài liệu tham khảo đó nhưng vẫn ... không – iblazevic

Trả lời

12

Tôi nghĩ URL hình ảnh bạn đã xóa là tương đối. Để xây dựng các URL sử dụng tuyệt đối urlparse.urljoin:

def parse(self, response): 
    ... 
    image_relative_url = hxs.select("...").extract()[0] 
    import urlparse 
    image_absolute_url = urlparse.urljoin(response.url, image_relative_url.strip()) 
    item['image_urls'] = [image_absolute_url] 
    ... 

đã không được sử dụng ITEM_PIPELINES, nhưng docs nói:

In a Spider, you scrape an item and put the URLs of its images into a image_urls field.

Vì vậy, mục [ 'image_urls'] phải là một danh sách các hình ảnh URL. Nhưng code của bạn có:

item['image_urls'] = 'http://www.domain.com' + item['image_urls'] 

Vì vậy, tôi đoán nó lặp URL char duy nhất của bạn bằng cách char - sử dụng mỗi khi URL.

+0

Điều này không giúp ích gì. Như tôi đã nói tôi đã có đường dẫn tuyệt đối theo cách của tôi, tôi đã kiểm tra url tôi nhận được và nó thực sự là url của một hình ảnh. Tôi đã thử này và kết quả là giống như trước, tôi nhận được url tốt nhưng khi tôi bật ITEM_PIPELINES và IMAGES_STORE tôi nhận được lỗi tương tự như trước – iblazevic

+0

nhưng cách này để nhận url tuyệt đối chắc chắn là tốt hơn, vì vậy cảm ơn cho rằng – iblazevic

+0

@iblazevic, xem cập nhật của tôi. Và đừng quên để upvote/chấp nhận câu trả lời – warvariuc

5

Tôi nghĩ rằng bạn có thể cần phải cung cấp url hình ảnh của bạn trong một danh sách cho Item:

item['image_urls'] = [ 'http://www.domain.com' + item['image_urls'] ] 
+0

Điều đó là chính xác. Ngay cả khi URL của bạn đúng, image_urls được cho là danh sách các url, không có chuỗi. – rvnovaes

+0

vâng, nó phải là một danh sách. Cảm ơn bạn đã bình luận –

+0

100% đồng ý với bạn, điều đó giải quyết được vấn đề của tôi. Cảm ơn –

Các vấn đề liên quan