2016-10-11 4 views
0

Google 및 스택 오버플로 솔루션의 모든 검색 결과를 시도했지만 해결책을 얻을 수 없습니다. 나는이미지 URL을 가져올 수없고 이미지를 다운로드 할 수 없습니다.

내 items.py

class MyntraItem(scrapy.Item): 
    product_urls=scrapy.Field() 
    files=scrapy.Field() 
    image_urls=scrapy.Field() 
    images = scrapy.Field() 

내 settings.py

BOT_NAME = 'hello' 

SPIDER_MODULES = ['myntra.spiders'] 
NEWSPIDER_MODULE = 'myntra.spiders' 

FILES_STORE = '/home/swapnil/Desktop/AI/myntra/' 
ITEM_PIPELINES = { 
    #'myntra.pipelines.SomePipeline': 300, 
    'scrapy.pipelines.images.FilesPipeline': 1, 
} 

내 first.py 아래의 코드를 찾아주십시오 이미지를 추출하는 scrapy을 만드는 오전

class FirstSpider(CrawlSpider): 
    name = "first" 
    allowed_domains = ["myntra.com"] 
    start_urls = [ 
     'http://www.myntra.com/men-sports-tshirts-menu?src=tNav&f=Pattern_article_attr%3Astriped', 
    ] 
    rules = [Rule(LinkExtractor(restrict_xpaths=['//*[@class="product-link"]']),callback='parse_lnk',follow=True)] 
    #rules = [Rule(LinkExtractor(allow=['.*']),callback='parse_lnk',follow=True)] 

    def parse_lnk(self, response): 
     item=MyntraItem() 
     item['product_urls']=response.url 
     item['files']=response.xpath('//*[@class="thumbnails-selected-image"]/@src') 
     item['image_urls']=item['files'] 
     #print '666666666666666666',item['files'] 
     return item 

도와주세요 : 제 의도는 이미지를 다운로드하는 것입니다.

답변

0

기본적으로 FilesPipelinean item's "file_urls" key 값에서 파일 URL을 사용할 수 있어야합니다. 거미가, 각각의 키에 결과를 넣어 것입니다 파이프 라인 ("files" 또는 (파일 또는 이미지 파이프 라인 각각에 대한 "file_urls "또는 "image_urls")의 URL 키와 딕셔너리를 반환하는 경우

(...) "images").

그것은 당신이 "product_urls"을 사용하는 것 같다. 파이프 라인이 URL을 찾을 경우, 당신은 FILES_URLS_FIELD = "product_urls"를 설정해야 변경합니다.

+0

내 코드 'product_urls'는 이미지 링크 및 항목 [ 'files'] = response.xpath ('// * [@ class = "축소판 이미지 - 선택된 이미지"]/@ src')이 코드는 다운로드해야하는 이미지에 대한 정보를 가지고 있으며, image_urls로 이름을 바꾸는 것이 좋습니다. 업데이트 된 코드 –

+0

을 확인하십시오. 'FilesPipeline'을 사용하고 있기 때문에, 1) 아이템 정의에서'file_urls' 필드를 사용하고, 아이템을 반환 할 때 그것을 채우거나, 2) 파이프 라인에 다른 필드를 찾고 당신의'settings. py'는'FILES_URLS_FIELD = "images_urls"'를 정의해야합니다. 대안으로, 코드 변경이 적어서'FilesPipeline' 대신'ImagesPipeline'을로드하는 것입니다. 또한'/ * [@ class = "thumbnails-selected-image"]/@ src'는 제품 페이지에서 이미지를 생성하지 않는 것으로 보입니다. –

0

사용 ImagesPipeline 대신 regex을 사용하여 이미지를 추출하십시오. settings.py

IMAGES_STORE = '/home/swapnil/Desktop/AI/myntra/' 

ITEM_PIPELINES = {'myntra.pipelines.SomePipeline': 300, 
        'scrapy.pipelines.images.ImagesPipeline': 1,} 

에서 내 first.py

item['files']= re.findall('front":\{"path":"(.+?)"', response.body) 

에서

마법처럼이 것 작동합니다.

+0

나는 당신의 제안을 시도한 다음 [link] (http://www.myntra.com/tshirts/fila/fila-men-green-eagle-printed-round-neck-t-shirt/1502783/buy?src= search & uq = false & q = C % 3A % 2FUsers % 2Fsharm_000 % 2FAppData % 2FLocal % 2FTemp % 2Ftmpqshvkx.html & p = 4)이 링크는 치료 껍질에서 볼 수 있으며 어떤 신체도 제공하지 않습니다. –

+0

그러나 문제는 무엇인지 확실하지 않지만 브라우저로 렌더링되기 전에 이미지 URL이 실제로 javascript 변수에 저장됩니다. 그래서 ** HtmlXPathSelector **에서 re 메소드를 사용하거나 ** re ** 모듈을 직접 사용하여 이미지 URL을 추출해야합니다. –

관련 문제