我已经尝试了谷歌和堆栈溢出解决方案中的每个搜索结果,但我无法得到解决方案。 我正在创建一个scrapy来提取图像,请找到下面的代码
我的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
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 :(得分:0)
默认情况下,FilesPipeline
期望文件网址的值为an item's "file_urls"
key。
(...)如果蜘蛛返回带有URL键(
"file_urls
“或”的dict"image_urls"
,分别为“文件或图像管道”) 管道会将结果放在相应的键("files"
或"images"
)下。
您似乎正在使用"product_urls"
。要更改管道查找网址的位置,您需要设置FILES_URLS_FIELD = "product_urls"
。
答案 1 :(得分:0)
使用 ImagesPipeline ,然后使用正则表达式提取图像。
在我的first.py
中item['files']= re.findall('front":\{"path":"(.+?)"', response.body)
在settings.py中
IMAGES_STORE = '/home/swapnil/Desktop/AI/myntra/'
ITEM_PIPELINES = {'myntra.pipelines.SomePipeline': 300,
'scrapy.pipelines.images.ImagesPipeline': 1,}
这就像一个魅力。